电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

spring集成httpclient配置的詳細過程

瀏覽:143日期:2023-07-04 18:28:34
一、簡介

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

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

二、特性

1. 基于標準、純凈的java語言。實現了Http1.0和Http1.1

2. 以可擴展的面向對象的結構實現了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。

3. 支持HTTPS協議。

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

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

6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。

7. 插件式的自定義認證方案。

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

9. 連接管理器支持多線程應用。支持設置最大連接數,同時支持設置每個主機的最大連接數,發現并關閉過期的連接。

10. 自動處理Set-Cookie中的Cookie。

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

12. Request的輸出流可以避免流中內容直接緩沖到socket服務器。

13. Response的輸入流可以有效的從socket服務器直接讀取相應內容。

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

15. 直接獲取服務器發送的response code和 headers。

16. 設置連接超時的能力。

17. 實驗性的支持http1.1 response caching。

18. 源代碼基于Apache License 可免費獲取。

spring httpclient

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

spring與httpclient集成方式如下:

引入jar包

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

2.編寫執行get和post請求的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; /** * 執行GET請求 * * @param url * @return * @throws IOException * @throws ClientProtocolException */ public String doGet(String url) throws ClientProtocolException, IOException {// 創建http GET請求HttpGet httpGet = new HttpGet(url);httpGet.setConfig(this.requestConfig);CloseableHttpResponse response = null;try { // 執行請求 response = httpClient.execute(httpGet); // 判斷返回狀態是否為200 if (response.getStatusLine().getStatusCode() == 200) {return EntityUtils.toString(response.getEntity(), 'UTF-8'); }} finally { if (response != null) {response.close(); }}return null; } /** * 帶有參數的GET請求 * * @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()); } /** * 執行POST請求 * * @param url * @param params * @return * @throws IOException */ public HttpResult doPost(String url, Map<String, String> params) throws IOException {// 創建http POST請求HttpPost httpPost = new HttpPost(url);httpPost.setConfig(this.requestConfig);if (params != null) { // 設置2個post參數,一個是scope、一個是q List<NameValuePair> parameters = new ArrayList<NameValuePair>(); for (String key : params.keySet()) {parameters.add(new BasicNameValuePair(key, params.get(key))); } // 構造一個form表單式的實體 UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, 'UTF-8'); // 將請求實體設置到httpPost對象中 httpPost.setEntity(formEntity);}CloseableHttpResponse response = null;try { // 執行請求 response = httpClient.execute(httpPost); return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity(), 'UTF-8'));} finally { if (response != null) {response.close(); }} } /** * 執行POST請求 * * @param url * @return * @throws IOException */ public HttpResult doPost(String url) throws IOException {return this.doPost(url, null); } /** * 提交json數據 * * @param url * @param json * @return * @throws ClientProtocolException * @throws IOException */ public HttpResult doPostJson(String url, String json) throws ClientProtocolException, IOException {// 創建http POST請求HttpPost httpPost = new HttpPost(url);httpPost.setConfig(this.requestConfig);if (json != null) { // 構造一個form表單式的實體 StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON); // 將請求實體設置到httpPost對象中 httpPost.setEntity(stringEntity);}CloseableHttpResponse response = null;try { // 執行請求 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 { /** * 狀態碼 */ private Integer status; /** * 返回數據 */ 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'><!-- 最大連接數 --><property name='maxTotal' value='${http.maxTotal}' /><!-- 設置每個主機地址的并發數 --><property name='defaultMaxPerRoute' value='${http.defaultMaxPerRoute}' /> </bean> <!-- httpclient對象構建器 --> <bean class='org.apache.http.impl.client.HttpClientBuilder'><!-- 設置連接管理器 --><property name='connectionManager' ref='httpClientConnectionManager' /> </bean> <!-- 定義Httpclient對象 --> <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'><!-- 創建連接的最長時間 --><property name='connectTimeout' value='${http.connectTimeout}'/><!-- 從連接池中獲取到連接的最長時間 --><property name='connectionRequestTimeout' value='${http.connectionRequestTimeout}'/><!-- 數據傳輸的最長時間 --><property name='socketTimeout' value='${http.socketTimeout}'/><!-- 提交請求前測試連接是否可用 --><property name='staleConnectionCheckEnabled' value='${http.staleConnectionCheckEnabled}'/> </bean> <!-- 定義請求參數 --> <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.使用一個單獨的線程完成連接池中的無效鏈接的清理

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;// 啟動當前線程this.start(); } @Override public void run() {try { while (!shutdown) {synchronized (this) { wait(5000); // 關閉失效的連接 connMgr.closeExpiredConnections();} }} catch (InterruptedException ex) { // 結束} } public void shutdown() {shutdown = true;synchronized (this) { notifyAll();} }}

到此這篇關于spring集成httpclient配置的文章就介紹到這了,更多相關spring httpclient配置內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 东莞市超赞电子科技有限公司 全系列直插/贴片铝电解电容,电解电容,电容器 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 西门子代理商_西门子变频器总代理-翰粤百科| 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 山东成考网-山东成人高考网| 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 刑事律师_深圳著名刑事辩护律师_王平聚【清华博士|刑法教授】 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 新能源汽车电机定转子合装机 - 电机维修设备 - 睿望达 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 铣床|万能铣床|立式铣床|数控铣床|山东滕州万友机床有限公司 | 天然鹅卵石滤料厂家-锰砂滤料-石英砂滤料-巩义东枫净水 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | SMC-SMC电磁阀-日本SMC气缸-SMC气动元件展示网 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 |