kun*_*foo 5 java post httpclient
我有类似以下的代码:
try {
HttpPost post = new HttpPost(httpsUrl);
setHeaders(post);
HttpEntity entity = new StringEntity(request, "UTF-8");
post.setEntity(entity);
HttpResponse response = httpclient.execute(post);
String result = EntityReader.readContent(response.getEntity());
checkAnswer(result);
return result;
} catch (Exception e) {
throw new ZapException("Error executing the http post request: "+e.getMessage(), e);
}
Run Code Online (Sandbox Code Playgroud)
它使用之前可能已经使用过的 httpclient 实例通过 POST 将内容发送request到服务器(它打开了持久连接,因为我们向同一服务器发送了相当多的请求......)。
有时会失败,并SocketTimeoutException显示“读取超时”消息。我们不清楚为什么它只在某些时候失败,而大多数时候却不会。是什么赋予了?
在下文中,我假设您使用的是 Apache Commons HttpClient ( org.apache.commons.httpclient.HttpClient)。
也许您被抛出的原因SocketTimeoutException仅仅是因为,有时,与您的 HttpClient 实例通信的主机需要很长时间才能响应,从而触发 HttpClient 的取消例程。您可以使用以下命令增加连接超时和套接字超时
HttpConnectionParams params = httpclient.getHttpConnectionManager().getParams();
params.setConnectionTimeout(20000);
params.setSoTimeout(15000);
Run Code Online (Sandbox Code Playgroud)
此外,如果尽管增加了超时限制,但您仍然面临超时,那么最好妥善处理SocketTimeoutException,例如第二次和第三次重试连接。
| 归档时间: |
|
| 查看次数: |
10164 次 |
| 最近记录: |