国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

spring集成httpclient配置的詳細(xì)過程

瀏覽:145日期:2023-07-04 18:28:34
一、簡(jiǎn)介

HttpClient是Apache Jakarta Common下的子項(xiàng)目,用來提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包,并且它支持HTTP協(xié)議最新的版本和建議。HttpClient已經(jīng)應(yīng)用在很多的項(xiàng)目中,比如Apache Jakarta上很著名的另外兩個(gè)開源項(xiàng)目Cactus和HTMLUnit都使用了HttpClient。

下載地址: http://hc.apache.org/downloads.cgi

二、特性

1. 基于標(biāo)準(zhǔn)、純凈的java語言。實(shí)現(xiàn)了Http1.0和Http1.1

2. 以可擴(kuò)展的面向?qū)ο蟮慕Y(jié)構(gòu)實(shí)現(xiàn)了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。

3. 支持HTTPS協(xié)議。

4. 通過Http代理建立透明的連接。

5. 利用CONNECT方法通過Http代理建立隧道的https連接。

6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認(rèn)證方案。

7. 插件式的自定義認(rèn)證方案。

8. 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。

9. 連接管理器支持多線程應(yīng)用。支持設(shè)置最大連接數(shù),同時(shí)支持設(shè)置每個(gè)主機(jī)的最大連接數(shù),發(fā)現(xiàn)并關(guān)閉過期的連接。

10. 自動(dòng)處理Set-Cookie中的Cookie。

11. 插件式的自定義Cookie策略。

12. Request的輸出流可以避免流中內(nèi)容直接緩沖到socket服務(wù)器。

13. Response的輸入流可以有效的從socket服務(wù)器直接讀取相應(yīng)內(nèi)容。

14. 在http1.0和http1.1中利用KeepAlive保持持久連接。

15. 直接獲取服務(wù)器發(fā)送的response code和 headers。

16. 設(shè)置連接超時(shí)的能力。

17. 實(shí)驗(yàn)性的支持http1.1 response caching。

18. 源代碼基于Apache License 可免費(fèi)獲取。

spring httpclient

HTTP 協(xié)議可能是現(xiàn)在 Internet 上使用得最多、最重要的協(xié)議了,越來越多的 Java 應(yīng)用程序需要直接通過 HTTP 協(xié)議來訪問網(wǎng)絡(luò)資源。雖然在 JDK 的 java.net 包中已經(jīng)提供了訪問 HTTP 協(xié)議的基本功能,但是對(duì)于大部分應(yīng)用程序來說,JDK 庫本身提供的功能還不夠豐富和靈活。HttpClient 是 Apache Jakarta Common 下的子項(xiàng)目,用來提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。

spring與httpclient集成方式如下:

引入jar包

<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version></dependency>

2.編寫執(zhí)行g(shù)et和post請(qǐng)求的java類

package com.wee.common.service;import java.io.IOException;import java.net.URISyntaxException;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.utils.URIBuilder;import org.apache.http.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.wee.common.bean.HttpResult;@Servicepublic class HttpClientService { @Autowired private CloseableHttpClient httpClient; @Autowired private RequestConfig requestConfig; /** * 執(zhí)行GET請(qǐng)求 * * @param url * @return * @throws IOException * @throws ClientProtocolException */ public String doGet(String url) throws ClientProtocolException, IOException {// 創(chuàng)建http GET請(qǐng)求HttpGet httpGet = new HttpGet(url);httpGet.setConfig(this.requestConfig);CloseableHttpResponse response = null;try { // 執(zhí)行請(qǐng)求 response = httpClient.execute(httpGet); // 判斷返回狀態(tài)是否為200 if (response.getStatusLine().getStatusCode() == 200) {return EntityUtils.toString(response.getEntity(), 'UTF-8'); }} finally { if (response != null) {response.close(); }}return null; } /** * 帶有參數(shù)的GET請(qǐng)求 * * @param url * @param params * @return * @throws URISyntaxException * @throws IOException * @throws ClientProtocolException */ public String doGet(String url, Map<String, String> params) throws ClientProtocolException, IOException, URISyntaxException {URIBuilder uriBuilder = new URIBuilder(url);for (String key : params.keySet()) { uriBuilder.addParameter(key, params.get(key));}return this.doGet(uriBuilder.build().toString()); } /** * 執(zhí)行POST請(qǐng)求 * * @param url * @param params * @return * @throws IOException */ public HttpResult doPost(String url, Map<String, String> params) throws IOException {// 創(chuàng)建http POST請(qǐng)求HttpPost httpPost = new HttpPost(url);httpPost.setConfig(this.requestConfig);if (params != null) { // 設(shè)置2個(gè)post參數(shù),一個(gè)是scope、一個(gè)是q List<NameValuePair> parameters = new ArrayList<NameValuePair>(); for (String key : params.keySet()) {parameters.add(new BasicNameValuePair(key, params.get(key))); } // 構(gòu)造一個(gè)form表單式的實(shí)體 UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, 'UTF-8'); // 將請(qǐng)求實(shí)體設(shè)置到httpPost對(duì)象中 httpPost.setEntity(formEntity);}CloseableHttpResponse response = null;try { // 執(zhí)行請(qǐng)求 response = httpClient.execute(httpPost); return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity(), 'UTF-8'));} finally { if (response != null) {response.close(); }} } /** * 執(zhí)行POST請(qǐng)求 * * @param url * @return * @throws IOException */ public HttpResult doPost(String url) throws IOException {return this.doPost(url, null); } /** * 提交json數(shù)據(jù) * * @param url * @param json * @return * @throws ClientProtocolException * @throws IOException */ public HttpResult doPostJson(String url, String json) throws ClientProtocolException, IOException {// 創(chuàng)建http POST請(qǐng)求HttpPost httpPost = new HttpPost(url);httpPost.setConfig(this.requestConfig);if (json != null) { // 構(gòu)造一個(gè)form表單式的實(shí)體 StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON); // 將請(qǐng)求實(shí)體設(shè)置到httpPost對(duì)象中 httpPost.setEntity(stringEntity);}CloseableHttpResponse response = null;try { // 執(zhí)行請(qǐng)求 response = this.httpClient.execute(httpPost); return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity(), 'UTF-8'));} finally { if (response != null) {response.close(); }} }}

HttpResult.javapublic class HttpResult { /** * 狀態(tài)碼 */ private Integer status; /** * 返回?cái)?shù)據(jù) */ private String data; public HttpResult() { } public HttpResult(Integer status, String data) {this.status = status;this.data = data; } public Integer getStatus() {return status; } public void setStatus(Integer status) {this.status = status; } public String getData() {return data; } public void setData(String data) {this.data = data; }}

3.spring和httpClient整合配置文件

<!-- 定義連接管理器 --> <bean destroy-method='close'><!-- 最大連接數(shù) --><property name='maxTotal' value='${http.maxTotal}' /><!-- 設(shè)置每個(gè)主機(jī)地址的并發(fā)數(shù) --><property name='defaultMaxPerRoute' value='${http.defaultMaxPerRoute}' /> </bean> <!-- httpclient對(duì)象構(gòu)建器 --> <bean class='org.apache.http.impl.client.HttpClientBuilder'><!-- 設(shè)置連接管理器 --><property name='connectionManager' ref='httpClientConnectionManager' /> </bean> <!-- 定義Httpclient對(duì)象 --> <bean factory-bean='httpClientBuilder' factory-method='build' scope='prototype'> </bean> <!-- 定義清理無效連接 --> <bean destroy-method='shutdown'><constructor-arg index='0' ref='httpClientConnectionManager' /> </bean> <bean class='org.apache.http.client.config.RequestConfig.Builder'><!-- 創(chuàng)建連接的最長(zhǎng)時(shí)間 --><property name='connectTimeout' value='${http.connectTimeout}'/><!-- 從連接池中獲取到連接的最長(zhǎng)時(shí)間 --><property name='connectionRequestTimeout' value='${http.connectionRequestTimeout}'/><!-- 數(shù)據(jù)傳輸?shù)淖铋L(zhǎng)時(shí)間 --><property name='socketTimeout' value='${http.socketTimeout}'/><!-- 提交請(qǐng)求前測(cè)試連接是否可用 --><property name='staleConnectionCheckEnabled' value='${http.staleConnectionCheckEnabled}'/> </bean> <!-- 定義請(qǐng)求參數(shù) --> <bean factory-bean='requestConfigBuilder' factory-method='build'> </bean>

4.httpclient.properties

httpClient.maxTotal=200httpClient.defaultMaxPerRoute=50httpClient.connectTimeout=1000httpClient.connectionRequestTimeout=500httpClient.socketTimeout=10000httpClient.staleConnectionCheckEnabled=true

5.使用一個(gè)單獨(dú)的線程完成連接池中的無效鏈接的清理

package com.wee.common.httpclient;import org.apache.http.conn.HttpClientConnectionManager;public class IdleConnectionEvictor extends Thread { private final HttpClientConnectionManager connMgr; private volatile boolean shutdown; public IdleConnectionEvictor(HttpClientConnectionManager connMgr) {this.connMgr = connMgr;// 啟動(dòng)當(dāng)前線程this.start(); } @Override public void run() {try { while (!shutdown) {synchronized (this) { wait(5000); // 關(guān)閉失效的連接 connMgr.closeExpiredConnections();} }} catch (InterruptedException ex) { // 結(jié)束} } public void shutdown() {shutdown = true;synchronized (this) { notifyAll();} }}

到此這篇關(guān)于spring集成httpclient配置的文章就介紹到這了,更多相關(guān)spring httpclient配置內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 国产成人免费视频精品一区二区 | 久久久久久久久国产 | 日本一级在线观看 | 成人亚洲欧美日韩在线 | 一本高清 | 色婷婷久久综合中文久久蜜桃 | 欧美成人自拍视频 | 欧洲成人全免费视频网站 | 亚洲成a人片在线观 | 日韩专区亚洲精品欧美专区 | 精品国产91久久久久 | 在线观看免费a∨网站 | 亚洲国产成人久久精品影视 | 成人a毛片一级 | 男女乱淫视频 | 国产一二三区精品 | 亚洲国产日韩女人aaaaaa毛片在线 | 深夜福利亚洲 | 久久久综合网 | 午夜欧美 | chinese性老妇中国 | 巴西一级毛片 | 中文字幕在线视频网站 | 欧美在线播放成人a | 欧美xxxxx九色视频免费观看 | 99精品一区二区三区 | 成人午夜免费视频毛片 | 国产精品观看在线亚洲人成网 | 国产精品2020 | 精品一区二区三区的国产在线观看 | 中文字幕在线观看不卡视频 | 一级毛片欧美大片 | 美女张开腿给男人桶 | 久久精品国产精品青草色艺 | 亚洲国产情侣一区二区三区 | 精品国产成人在线 | 成人毛片免费播放 | 欧美操人视频 | 欧美精品videosbestsex另类 | 亚洲图片视频在线 | 91久久精品一区二区 |