Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么HttpClient在执行POST时抛出SocketTimeOutException_Java_Post_Httpclient - Fatal编程技术网

Java 为什么HttpClient在执行POST时抛出SocketTimeOutException

Java 为什么HttpClient在执行POST时抛出SocketTimeOutException,java,post,httpclient,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 = Ent

我有类似以下代码:

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);
}
它使用以前可能已经使用过的httpclient实例,通过POST将
请求的内容发送到服务器(它打开了持久连接,因为我们正在向同一服务器发送相当多的请求…)

此操作有时会失败,消息为“Read timed out”(读取超时)。
我们不清楚为什么它只在某些时候失败,而大多数时候没有。给出了什么?

在下面,我假设您使用的是Apache Commons HttpClient(
org.Apache.Commons.HttpClient.HttpClient

可能您会被抛出一个
SocketTimeoutException
,这仅仅是因为有时候,您的HttpClient实例与之通信的主机需要花费太长时间才能响应,从而触发HttpClient的取消例程。 您可以通过以下方法增加连接超时和套接字超时

HttpConnectionParams params = httpclient.getHttpConnectionManager().getParams();
params.setConnectionTimeout(20000);
params.setSoTimeout(15000);

另外,如果您在增加超时限制的情况下仍然面临超时问题,那么最好优雅地处理
SocketTimeoutException
——例如,第二次和第三次重试连接。

我在向solr w/tomcat 7发送多个请求时也遇到类似的问题。您将请求发送到什么?您的服务器的详细信息是什么?因为这是错误的根源。我想是Jetty 6。但那是很久以前的事了……HttpClient不是作为默认行为重试了3次吗?