httpclient 使用 发表于 2020-11-03 | 更新于 2024-01-08 | 分类于 Java | 阅读次数: | 字数: 3.5k | 时长 ≈ 3 分钟 标签 apache httpclient 连接池配置12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970private static final int MAX_CONN_TOTAL = 500;private static final int MAX_CONN_PER_ROUTE = 50;private static final int CONNECTION_REQUEST_TIMEOUT = 5000;private static final int CONNECT_TIMEOUT = 5000;private static final int SOCKET_TIMEOUT = 30000;private static CloseableHttpClient client;static { Builder builder = RequestConfig.custom(); builder builder// 从连接池获取连接的超时时间 .setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT) // 与接口服务器连接超时时间 .setConnectTimeout(CONNECT_TIMEOUT) // 获取响应数据超时时间 .setSocketTimeout(SOCKET_TIMEOUT); /* * 4.3以上版本推荐使用HttpClientBuilder来创建client * * <pre> * 1、HttpClientBuilder.setRetryHandler(HttpRequestRetryHandler retryHandler);请求重试处理。 * 2、HttpClientBuilder.setRedirectStrategy(RedirectStrategy redirectStrategy);设置重定向。 * 3、httpClientBuilder.setDefaultCookieStore(BasicCookieStore cookieStore);设置cookie store * 4、HttpClientBuilder.setProxy(HttpHost proxy);设置代理服务器。 * 5、HttpClientBuilder.setDefaultRequestConfig(RequestConfig config);在此亦可设置RequestConfig。 * 6、HttpClientBuilder.setUserAgent(String userAgent);设置用户代理。 * </pre> */ HttpClientBuilder clientBuilder = HttpClients.custom(); // builder.setExpectContinueEnabled(true).setStaleConnectionCheckEnabled(true) // .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, // AuthSchemes.DIGEST)) // .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)); builder.setCookieSpec(CookieSpecs.IGNORE_COOKIES); RequestConfig defaultRequestConfig = builder.build(); clientBuilder.setDefaultRequestConfig(defaultRequestConfig); // 连接池配置代码 // 默认是:20 clientBuilder.setMaxConnTotal(MAX_CONN_TOTAL); // 默认是:2 clientBuilder.setMaxConnPerRoute(MAX_CONN_PER_ROUTE); // 第一种方式:如果是 ip+端口的 https 地址,需要配置不校验证书,否则会报 SSLPeerUnverifiedException 异常 clientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); // try { // // SSL or TLS // SSLContext sc = SSLContext.getInstance("SSL"); // MyX509TrustManager trustManager = new MyX509TrustManager(); // sc.init(null, new TrustManager[]{trustManager}, new java.security.SecureRandom()); // // // 设置协议http和https对应的处理socket链接工厂的对象 // // Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() // // .register("http", PlainConnectionSocketFactory.INSTANCE) // // // 第二种方式:如果是 ip+端口的 https 地址,需要配置不校验证书,否则会报 SSLPeerUnverifiedException 异常 // // .register("https", new SSLConnectionSocketFactory(sc, NoopHostnameVerifier.INSTANCE)) // // .build(); // // PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(registry); // // 主要连接池配置代码 // // 默认是:20 // // connManager.setMaxTotal(MAX_CONN_TOTAL); // // 默认是:2 // // connManager.setDefaultMaxPerRoute(MAX_CONN_PER_ROUTE); // // clientBuilder.setConnectionManager(connManager); // // 第三种方式:如果是 ip+端口的 https 地址,需要配置不校验证书,否则会报 SSLPeerUnverifiedException 异常 // clientBuilder.setSSLSocketFactory(new SSLConnectionSocketFactory(sc, NoopHostnameVerifier.INSTANCE)); // } catch (Exception e) { // e.printStackTrace(); // } client = clientBuilder.build();} 本文作者: forever杨 本文链接: https://blog.yl-online.top/posts/812c7f75.html 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!