httpClient 几种超时问题

HttpClient的有3种超时时间,分别是:

1、


[java] view plaincopyprint?
ConnManagerParams.setTimeout(params, 1000);  

ConnManagerParams.setTimeout(params, 1000);
2、

[java] view plaincopyprint?
HttpConnectionParams.setConnectionTimeout(params, 2000);  

HttpConnectionParams.setConnectionTimeout(params, 2000);3、[java] view plaincopyprint?
HttpConnectionParams.setSoTimeout(params, 4000);  

HttpConnectionParams.setSoTimeout(params, 4000);
下面分别解释:

1、定义了从ConnectionManager管理的连接池中取出连接的超时时间。

2、定义了通过网络与服务器建立连接的超时时间。HttpClient通过一个异步线程去创建与服务器的Socket连接,这就是该Socket连接的超时时间。

3、定义了Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间。

以上3种超时分别会抛出ConnectionPoolTimeoutException,ConnectionTimeoutException与SocketTimeoutException。

 

转载于:https://www.cnblogs.com/sunfb/p/3298677.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用 HttpClient 进行网络请求时,可能会遇到超时异常。处理超时异常的方法有以下几种: 1. 设置超时时间:在创建 HttpClient 实例时,可以设置连接超时时间和读取超时时间,以确保请求在规定时间内得到响应。例如: ``` RequestConfig config = RequestConfig.custom() .setConnectTimeout(5000) // 连接超时时间为5秒 .setSocketTimeout(5000) // 读取超时时间为5秒 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(config) .build(); ``` 2. 使用连接池:使用连接池可以提高 HttpClient 的性能和稳定性,同时也可以减少超时异常的发生。例如: ``` PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); connManager.setMaxTotal(100); // 最大连接数为100 connManager.setDefaultMaxPerRoute(20); // 每个路由的最大连接数为20 CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(connManager) .build(); ``` 3. 重试机制:在请求失败时,可以进行重试,以增加请求成功的概率。例如: ``` HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() { @Override public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { if (executionCount >= 3) { // 最多重试3次 return false; } if (exception instanceof InterruptedIOException) { // 超时异常 return true; } if (exception instanceof UnknownHostException) { // 未知主机异常 return false; } if (exception instanceof ConnectTimeoutException) { // 连接超时异常 return true; } if (exception instanceof SSLException) { // SSL异常 return false; } HttpClientContext clientContext = HttpClientContext.adapt(context); HttpRequest request = clientContext.getRequest(); boolean idempotent = !(request instanceof HttpEntityEnclosingRequest); if (idempotent) { // 幂等请求 return true; } return false; } }; CloseableHttpClient httpClient = HttpClients.custom() .setRetryHandler(retryHandler) .build(); ``` 以上是处理 HttpClient 超时异常的几种方法,具体选择哪种方法,需要根据实际情况进行判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值