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

标签 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();
        }
    }
}

执行 2 次后 HttpClient 停止执行相同的 HttpGet。虽然,我在循环中实例化了一个新的 HttpClient,但它不会停止。我想知道是否有某种策略阻止 HttpClient 执行相同的 HttpGet 方法超过 2 次?
谁能帮帮我,我将不胜感激!

最佳答案

客户端正在使用连接池来访问 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();
        }
    }
}

关于java - HttpClient 执行两次后停止在循环中执行相同的 HttpGet 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650157/

相关文章:

android - 如何异步执行 httprequest 并显示下载响应的进度

java - 通过 https ://获取 XML 数据

java - 可以将多个 fxml 包含到同一个 fxml 中吗

java - 一种算法,其中最终输出在 y 和 x 之间随机选择,但获得高值的机会较低

c# - 如何使用 HttpClient 发帖?

tomcat - Tomcat 6 中的 sun.net.www.http.HttpClient 内存泄漏

Java 服务器自签名证书 + 客户端证书和 SSL - 连接重置

java - Weld(CDI 的引用实现)是否具有 Spring 中存在的任何类型的原型(prototype)范围?

java - 获取已添加到 JFrame 中的按钮

java - 按主页或最近使用按钮后音乐不再播放