DefaultHttpRequestRetryHandler

public boolean retryRequest(

final IOException exception,

int executionCount,

final HttpContext context) {

if (exception == null) {

throw new IllegalArgumentException("Exception parameter may not be null");

}

if (context == null) {

throw new IllegalArgumentException("HTTP context may not be null");

}

if (executionCount > this.retryCount) {

// Do not retry if over max retry count

return false;

}

if (exception instanceof InterruptedIOException) {

// Timeout

return false;

}

if (exception instanceof UnknownHostException) {

// Unknown host

return false;

}

if (exception instanceof ConnectException) {

// Connection refused

return false;

}

if (exception instanceof SSLException) {

// SSL handshake exception

return false;

}

HttpRequest request = (HttpRequest)

context.getAttribute(ExecutionContext.HTTP_REQUEST);

if(requestIsAborted(request)){

return false;

}

if (handleAsIdempotent(request)) {

// Retry if the request is considered idempotent

return true;

}

Boolean b = (Boolean)

context.getAttribute(ExecutionContext.HTTP_REQ_SENT);

boolean sent = (b != null && b.booleanValue());

if (!sent || this.requestSentRetryEnabled) {

// Retry if the request has not been sent fully or

// if it's OK to retry methods that have been sent

return true;

}

// otherwise do not retry

return false;

}

...