执行两次后,HttpClient在循环中停止执行相同的HttpGet方法

zho*_*wei 2 java httpclient

这是我的主要方法:

public static void main(String[] args) {

    BasicCookieStore cookieStore = null;
    HttpResponse httpResponse = null;
    HttpClient httpClient = HttpClients.createDefault();
    while (true) {
        HttpUriRequest request = new HttpGet("http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/HttpClientBuilder.html");
        try {
            httpResponse = httpClient.execute(request);
            System.out.println(httpResponse.getStatusLine().getStatusCode());
        } catch (Exception e) {
            System.out.println(httpResponse.getStatusLine().getStatusCode());
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

执行2次后,HttpClient停止执行相同的HttpGet.虽然,我在循环中实例化一个新的HttpClient,但它不会停止.如果有什么策略阻止HttpClient执行相同的HttpGet方法超过2次,我会徘徊?谁能帮助我,我将非常感激!

sta*_*let 9

客户端正在使用连接池来访问Web服务器.请参阅HttpClientBuilder #build().创建默认的httpclient并且未指定任何内容时,它会创建一个大小为2的池.因此,在使用2之后,它会无限期地等待尝试从池中获取第三个连接.

您必须阅读响应或关闭连接,才能重新使用客户端对象.

查看更新的代码示例:

public static void main(String[] args) {

    BasicCookieStore cookieStore = null;
    HttpResponse httpResponse = null;
    HttpClient httpClient = HttpClients.createDefault();
    while (true) {
        HttpUriRequest request = new HttpGet("http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/HttpClientBuilder.html");
        try {
            httpResponse = httpClient.execute(request);
            httpResponse.getEntity().getContent().close();
            System.out.println(httpResponse.getStatusLine().getStatusCode());
        } catch (Exception e) {
            System.out.println(httpResponse.getStatusLine().getStatusCode());
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 客户端正在使用连接池来访问 Web 服务器。参见 HttpClientBuilder#build()。当创建一个默认的 httpclient 并且没有指定任何东西时,它会创建一个大小为 2 的池。所以在使用 2 之后,它会不确定地等待尝试从池中获取第三个连接。 (2认同)