CloseableHttpClient read time out

本文介绍了一种使用Java的HttpClient库实现HTTP GET请求的方法,并设置了连接和读取超时,确保在网络不稳定的情况下能有效控制请求时间。
public static String httpGetRequest(String url) {
   HttpGet httpGet = new HttpGet(url);
  //加入超时设置
   RequestConfig requestConfig  = RequestConfig.custom()
         .setSocketTimeout(5000)
         .setConnectTimeout(5000)
         .setConnectionRequestTimeout(5000)
         .setStaleConnectionCheckEnabled(true)
         .build();
   httpGet.setConfig(requestConfig);
}
Read timed out” 错误通常表示在尝试读取数据时,操作在规定的时间内未能完成,从而导致超时。 从网络请求的角度来看,当客户端向服务器发送请求并等待响应时,会设置一个超时时间。如果在这个时间内服务器没有返回数据,客户端就会抛出 “Read timed out” 错误。例如在 Axis2 传输中,将 `TimeOutInMilliSeconds` 的值设大后仍出现该问题,可能是因为 http 过期,需要增大 http 的失效时间,如 `ops.setProperty(HTTPConstants.SO_TIMEOUT, 600 * 1000);` [^3]。 从 I/O 操作的角度理解,以用户进程发起 read 操作为例,当 kernel 中的数据还没有准备好时,它不会阻塞用户进程,而是立刻返回一个 error。用户进程判断结果是一个 error 时,它就知道数据还没有准备好,可在本次到下次再发起 read 询问的时间间隔内做其他事情,或者直接再次发送 read 操作。一旦 kernel 中的数据准备好了,并且又再次收到了用户进程的 system call,那么它马上就将数据拷贝到了用户内存(这一阶段仍然是阻塞的),然后返回。若在这个过程中读取数据的时间超过了设定的超时时间,就会出现 “Read timed out” 错误 [^2]。 在 Gradle 中,访问 `https://services.gradle.org/distributions/gradle-8.5-bin.zip` 时出现 “Read timed out” 或 “Connect timed out” 错误,可能是由于网络问题导致在规定时间内无法完成数据读取,手动下载文件并定向到本地文件可以解决该问题 [^4]。 ```java // 示例代码,设置超时时间 import org.apache.http.client.config.RequestConfig; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; RequestConfig config = RequestConfig.custom() .setSocketTimeout(5000) // 读取超时时间 .setConnectTimeout(5000) // 连接超时时间 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(config) .build(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值