码迷,mamicode.com
首页 > Web开发 > 详细

HttpClient(4.3.5) - 异常处理

时间:2015-05-22 14:55:21      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

HttpClient 会抛出两种异常:java.io.IOException 和 org.apache.http.HttpException。IOException 在 I/O 失败时(比如 socket 超时、 socket 重置等)抛出。HttpException 在出现 HTTP 错误时抛出。通常来说,IOException 异常不是致命的,是恢复的;HttpException 是致命的,是无法自动恢复的。

默认情况下,HttpClient 会尝试从 I/O 异常中自动恢复。默认的自动恢复机制只限于少数认为是安全的异常。

  • HttpClient 不会尝试从任何的逻辑错误或者 HTTP 协议错误(HttpException 的子类)中恢复出来。
  • HttpClient 会自动重试等幂的方法,例如 HEAD、GET 方法。
  • HttpClient 会自动重试那些 HTTP 请求还正在传输至目标服务器时抛出传输异常的方法。

等幂性:如果一个事务,不管是执行一次还是很多次,得到的结果都是相同,这个事务就是等幂的。HttpClient 假定没有封装实体的方法为等幂的,比如 HEAD、GET;封装了实体的方法为非等幂的,比如 POST、PUT。

 

异常重试的示例

HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {
    public boolean retryRequest(IOException exception,
            int executionCount, HttpContext context) {
        if (executionCount >= 5) {
            // 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 ConnectTimeoutException) {
            // Connection refused
            return false;
        }
        if (exception instanceof SSLException) {
            // SSL handshake exception
            return false;
        }
        HttpClientContext clientContext = HttpClientContext
                .adapt(context);
        HttpRequest request = clientContext.getRequest();
        boolean idempotent = !(request instanceof HttpEntityEnclosingRequest);
        if (idempotent) {
            // Retry if the request is considered idempotent
            return true;
        }
        return false;
    }
};
CloseableHttpClient httpclient = HttpClients.custom()
    .setRetryHandler(myRetryHandler)
    .build();

 

HttpClient(4.3.5) - 异常处理

标签:

原文地址:http://www.cnblogs.com/huey/p/4520391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!