首页 > 解决方案 > 连接超时在 HttpClient 中不起作用

问题描述

我在我的 java 代码中使用 HttpClient 4.3.6 进行 POST HTTP 调用。我在通话后收到 504 网关超时错误,因此我使用以下 2 种方法设置了连接超时:

1--------

RequestConfig requestConfig =
RequestConfig.custom().setConnectTimeout(180 * 1000).build();
final HttpClient httpClient = 
          HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
final HttpClient httpClient = HttpClientBuilder.create().build();

final HttpPost postRequest = new HttpPost(utility.getUrl());

2---------

final HttpClient httpClient = HttpClientBuilder.create().build();

final HttpPost postRequest = new HttpPost(utility.getUrl());

RequestConfig rc = RequestConfig.DEFAULT;

RequestConfig requestConfig =
            RequestConfig
                .copy(rc)
                .setSocketTimeout(180 * 1000)
                .setConnectTimeout(180 * 1000)
                .setConnectionRequestTimeout(180 * 1000)
                .build();
postRequest.setConfig(requestConfig);

在尝试上述方法超时 3 分钟后,如果 POST 响应超过 1 分钟,我会收到 504 超时。不是等到3分钟。请告诉我是否在这里做错了。

标签: javahttpclientapache-httpclient-4.x

解决方案


正如@Boris 所提到的,如果您收到504,那么这绝对不是客户端,超时必须来自服务器。所有 Web 服务器都有默认的超时配置。例如检查Tomcat 文档,它将默认超时设置为 60 秒。我认为您应该检查您正在调用的网络服务器的超时配置。


推荐阅读