知识点

相关文章

更多

最近更新

更多

httpclient 使用连接池管理http请求对象

2019-03-17 00:00|来源: 网路

 httpclient 的连接管理对象为HttpClientConnectionManager
初始化HttpClient连接池初始化:
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
通过PoolingHttpClientConnectionManager对象可以设置最大连接数、每个主机地址的并发数等。
通过HttpClients.custom().setConnectionManager(HttpClientConnectionManager cm).build();来创建HttpClient对象


示例:


package com._656463.httpclient;
 
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
 
public class HttpConnectManager {
 
    public static void main(String[] args) throws Exception {
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        // 设置最大连接数
        cm.setMaxTotal(200);
        // 设置每个主机地址的并发数
        cm.setDefaultMaxPerRoute(20);
 
        doGet(cm);
        doGet(cm);
    }
 
    public static void doGet(HttpClientConnectionManager cm) throws Exception {
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(cm).build();
 
        // 创建http GET请求
        HttpGet httpGet = new HttpGet("http://www.baidu.com/");
 
        CloseableHttpResponse response = null;
        try {
            // 执行请求
            response = httpClient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(),
                        "UTF-8");
                System.out.println("内容长度:" + content.length());
            }
        } finally {
            if (response != null) {
                response.close();
            }
            // 此处不能关闭httpClient,如果关闭httpClient,连接池也会销毁
            // httpClient.close();
        }
    }
}

本文参考于网络


相关问答

更多
  • httpclient使用连接池可以降低发起http请求的tcp3次握手以及关闭连接4次挥手的时间消耗,设置的步骤如下: 1. 在定义一个HttpClientManager连接池管理类中 1.1 管理类构造方法中定义连接池初始化方法。方法中使用 PoolingHttpClientConnectionManager进行http连接池的实现 1.2 管理类中定义返回httpclient对象getHttpClient方法 2. 实例化HttpClientManager对象,通过HttpClientManager对象 ...
  • httpclient使用连接池可以降低发起http请求的tcp3次握手以及关闭连接4次挥手的时间消耗,设置的步骤如下: 在定义一个HttpClientManager连接池管理类中 1.1 管理类构造方法中定义连接池初始化方法。方法中使用
  • 一、所需要的jar包 httpclient-4.5.jar httpcore-4.4.1.jar httpmime-4.5.jar 二、实例 Java代码 package cn.tzz.apache.httpclient; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList;
  • 主要有以下几点原因: 1、网络不通,在调用的机器上评一下对方服务器ip或域名; 2、如果接口url用的域名,排查是不是DNS问题,这种问题使用方法1时ping域名应该是不通的,直接ping ip可以通; 3、请求接口时设置的超时时间太短,httpclient可以设置超时时间,如果网络不稳定的话会导致请求通信还没有完成就达到超时时间; 4、接口url错误,这种理论上会报404,但是如果人家要求使用https,而你用的http协议,有可能导致超时; 5、对方接口肯定有权限验证,看是以什么方式鉴权,如果用的除to ...
  • 引用了相应的.jar了吗,即是相应的.jar在CLASSPATH中了吗
  • 结帐http://htmlunit.sourceforge.net/ Checkout http://htmlunit.sourceforge.net/
  • 抛出ObjectDisposedException是因为在req.Content.ReadAsStringAsync()完成之前处理HttpRequestMessage和HttpClient 。 请注意, req.Content.ReadAsStringAsync()是一种异步方法。 在处理HttpClient之前,您需要等待它完成。 此外,你似乎在req.Content调用req.Content ,不应该是response.Content ? using (HttpRequestMessage req = ...
  • 您的程序集绑定重定向是错误的。 您的iOS项目应该有一个包含以下内容的app.config文件:
    根据MSDN ,因为.NET 4.5以下实例方法是线程安全的 (感谢@ischell): CancelPendingRequests DeleteAsync GetAsync GetByteArrayAsync GetStreamAsync GetStringAsync PostAsync PutAsync SendAsync According to MSDN, since .NET 4.5 The following instance methods are thread safe (thanks @ ...
  • 您可以使用此代码前进,它适用于我.. URL url = new URL("Your URL"); HttpURLConnection httpsURLConnection = (HttpURLConnection)url.openConnection(); httpsURLConnection.setReadTimeout(15000); httpsURLConnection.setConnectTimeout(20000); httpsURLConnec ...