1. 程式人生 > >基於httpClients的http請求工具類,實現restful風格的請求

基於httpClients的http請求工具類,實現restful風格的請求

package com.bx.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
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.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
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.message.BasicNameValuePair;
/**
 * 基於HttpClient第三方工具的http工具類
 * @author Administrator
 *
 */
public class HttpClientUtil {
	
	public static final String BASEURL = "http://127.0.0.1:8080/xxPlatform/";
	//統一配置
	private static PoolingHttpClientConnectionManager connMgr;
	private static RequestConfig requestConfig;
	private static final int MAX_TIMEOUT = 7000;
	static {
		// 設定連線池
		connMgr = new PoolingHttpClientConnectionManager();
		// 設定連線池大小
		connMgr.setMaxTotal(100);
		connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());

		RequestConfig.Builder configBuilder = RequestConfig.custom();
		// 設定連線超時
		configBuilder.setConnectTimeout(MAX_TIMEOUT);
		// 設定讀取超時
		configBuilder.setSocketTimeout(MAX_TIMEOUT);
		// 設定從連線池獲取連線例項的超時
		configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
		// 在提交請求之前 測試連線是否可用
		configBuilder.setStaleConnectionCheckEnabled(true);
		requestConfig = configBuilder.build();
	}
	/**
	 * 傳送get請求不帶引數
	 * @param url
	 * @return
	 */
	public static String sendGet(String url){
		
		return sendGet(BASEURL+url, null);
	}
	/**
	 * 傳送get請求
	 * @param url
	 * @param map
	 * @return
	 */
	public static String sendGet(String url,Map<String, String> map){
		
		String resulrStr = null;
		StringBuffer parms = null;
		url = BASEURL + url;
		//建立HttpClient物件
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//設定請求引數
		if(null != map && !map.isEmpty()){
			//遍歷map
			parms = new StringBuffer();
			for(Entry<String , String> entry:map.entrySet()){
				parms.append("&"+entry.getKey()+"="+entry.getValue());
			}
			url = url + parms.toString();
 		}
		//建立GET請求方法的例項,並填充url
		HttpGet httpGet = new HttpGet(url);
		httpGet.setConfig(requestConfig);
		try {
			//傳送(執行)請求
			CloseableHttpResponse response = httpClient.execute(httpGet);
			//獲取響應頭、內容
			int statusCode =  response.getStatusLine().getStatusCode();
			//列印狀態碼
			System.out.println("執行狀態碼:"+statusCode);
			HttpEntity entity = response.getEntity();
			resulrStr = IOUtils.toString(entity.getContent(),"UTF-8");
			response.close();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//關閉連線釋放資源
			try {
				httpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resulrStr;
	}
	
	/**
	 * 傳送post請求
	 * @param url
	 * @param map
	 * @return
	 */
	public static String sendPost(String url,Map<String, String> map){
		
		String resultStr = null;
		url = BASEURL + url;
		//建立HttpClient物件
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//建立請求方法例項,填充url
		HttpPost httpPost = new HttpPost(url);
		httpPost.setConfig(requestConfig);
		//設定請求引數(構造引數佇列)
		List<NameValuePair> parmsForm = new ArrayList<NameValuePair>();
		for(Entry<String, String> entry : map.entrySet()){
			parmsForm.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
		}
		UrlEncodedFormEntity entity; 
		try {
			entity = new UrlEncodedFormEntity(parmsForm,"UTF-8");
			//為方法例項設定引數佇列實體
			httpPost.setEntity(entity);
			//傳送(執行)
			CloseableHttpResponse response = httpClient.execute(httpPost);
			//獲取狀態碼
			int statusCode = response.getStatusLine().getStatusCode();
			System.out.println("執行狀態碼:"+statusCode);
			//獲取響應內容
			HttpEntity httpEntity = response.getEntity();
			resultStr = IOUtils.toString(httpEntity.getContent(), "UTF-8");
			response.close();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				httpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultStr;
	}
	
	/**
	 * 傳送put請求
	 * @param url
	 * @param map
	 * @return
	 */
	public static String sendPut(String url,Map<String, String> map){
		
		String resultStr = null;
		url = url + BASEURL;
		//新建httpClient物件
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//建立請求方法例項並填充url
		HttpPut httpPut = new HttpPut(url);
		httpPut.setConfig(requestConfig);
		//建立引數佇列
		List<NameValuePair> parmsForm = new ArrayList<NameValuePair>();
		for(Entry<String, String> entry : map.entrySet()){
			parmsForm.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
		}
		UrlEncodedFormEntity entity;
		try {
			entity = new UrlEncodedFormEntity(parmsForm);
			//將引數加入方法例項
			httpPut.setEntity(entity);
			//傳送
			CloseableHttpResponse response = httpClient.execute(httpPut);
			//獲取狀態碼
			int statusCode =  response.getStatusLine().getStatusCode();
			System.out.println(statusCode);
			//獲取響應內容
			HttpEntity httpEntity = response.getEntity();
			resultStr = IOUtils.toString(httpEntity.getContent(), "UTF-8");
			//關閉響應
			response.close();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				httpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultStr;
	}
	
	/**
	 * 傳送delete請求
	 * @param url
	 * @return
	 */
	public static String sendDelete(String url){
		
		String resultStr = null;
		url = url + BASEURL;
		//建立httpClient物件
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//建立方法例項
		HttpDelete httpDelete = new HttpDelete(url);
		httpDelete.setConfig(requestConfig);
		//執行
		try {
			CloseableHttpResponse response = httpClient.execute(httpDelete);
			//獲取響應狀態碼
			int statusCode = response.getStatusLine().getStatusCode();
			System.out.println(statusCode);
			//獲取響應內容
			HttpEntity entity = response.getEntity();
			resultStr = IOUtils.toString(entity.getContent(), "UTF-8");
			response.close();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				httpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultStr;
	}
	
}

相關推薦

基於httpClients的http請求工具實現restful風格請求

package com.bx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.ut

【laravel】 複雜表單請求驗證實現一個對應多個表單

一、序言 laravel 中提供了兩種驗證請求資料的方法,第一種方法適用於簡單的驗證,表單驗證和業務邏輯放在一起,顯得業務程式碼臃腫,而且重複的驗證規則基本也是複製貼上,程式碼也不好看,這是關鍵。本篇教程就不說這個了,需要了解的請戳這裡。第二種就是建立請求驗證類,下面就詳細說

Android SharedPreferences工具 實現List/Map的儲存讀取

最近因為需要將List集合和Map集合的資料儲存到SharedPreferences中,所以對以前自己封裝的SharedPreferencesUtil進行了修改,在原有的儲存讀Integer,String,Float,Long,Boolean,Object的基礎上增加了儲存讀取List<Obj

【laravel】 複雜表單請求驗證實現一個對應多個表單

一、序言 laravel 中提供了兩種驗證請求資料的方法,第一種方法適用於簡單的驗證,表單驗證和業務邏輯放在一起,顯得業務程式碼臃腫,而且重複的驗證規則基本也是複製貼上,程式碼也不好看,這是關鍵

使用DBUtils第三方工具實現MySQL資料庫的增刪改查

DBUtuls第三方工具類 使用到的有: 1.ResultSetHandler介面 結果集處理介面 2.QueryRunner類 完成資料庫的增/刪/改/查 3.DbUtils類 定義關閉資源與事物處理方法 1.自定義JDBC工具類

Java Https工具Java Https Post請求

Java Https工具類,Java Https Post請求   ================================ ©Copyright 蕃薯耀 2019-01-08 http://fanshuyao.iteye.com/   一、使用jsoup進行

連線資料庫的工具實現資料的插入

一、建立連線資料庫的工具類 package util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class DbUtil {

封裝JdbcUtil工具實現自動封裝為實體

根據今天所學,自己寫的JdbcUtil工具類。 其中update操作包含增刪改,使用事務處理 查詢操作分為兩種: 1、需要傳入sql語句(使用預編譯,用?佔位)、引數、需要包裝的實體類的class路徑;返回實體類的list(可以為單個) 2、傳入sql、引數。適用於查

基於OkHttp網路通訊工具(傳送get、post請求、檔案上傳和下載)

一、為什麼要用OkHttp? okhttp是專注於提升網路連線效率的http客戶端。 優點: 1、它能實現同一ip和埠的請求重用一個socket,這種方式能大大降低網路連線的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了伺服器伺服器的壓力。 2、okhttp 對

基於MybatisUtil工具完成CURD操作

package loaderman; import java.io.IOException; import java.io.Reader; import java.sql.Connection; import org.apache.ibatis.io.Resources; import o

連網工具get,post請求

public class HttpHelper { private final int HTTP_SECCESS=2000; private final int HTTP_FAIL=2001; private HttpListener listener; p

HTTP傳送post、put請求帶header、body的工具附呼叫測試demo

HTTP請求方法(可直接copy至你的工具類,屢試不爽) import com.alibaba.fastjson.JSONObject; import java.io.*; import java.ne

Android 通過WebService進行網路程式設計使用工具輕鬆實現

相信大家在平常的開發中,對網路的操作用到HTTP協議比較多,通過我們使用Get或者Post的方法呼叫一個數據介面,然後伺服器給我們返回JSON格式的資料,我們解析JSON資料然後展現給使用者,相信很多人很喜歡伺服器給我們返回JSON資料格式,因為他解析方便,也有一些JSON的

通用匯入工具通過poi和反射實現

將檔案從前端上傳到後端,就不說了,我的文章裡面有上傳的,剛開始寫,如果有問題歡迎批評指正首先,先說一下用法,因為之前每增加一個匯入模板就要單獨開發,比較浪費時間,所以單獨搞了個通用類,引數有待解析檔案,輸出的類,欄位陣列,開始行數,然後返回一個List1.我們已經獲取到這個檔

RedisUtil工具Java單例模式實現

基於Java單例模式和Jedis封裝的RedisUtil,提供了Redis中的Key、字串、Hash、ZSet等的操作。 package com.cumt.tools.redis; import com.alibaba.fastjson.JSON; im

Android studio 封裝請求網路工具以及實現(包含單例模式)

一般我們在請求網路資料時都會通過一個或多個連結去請求網路資料,但對於一些初學人士都只是在一個類裡或MainActivity做很多操作,這樣的話耦合度太高,程式碼感覺非常繁瑣,專案執行時可能會卡。一般在公司裡面也會要求低耦合,高類聚。這時就會通過封裝工具類來降低耦合度,這樣也就減少了程式碼與程

自己封裝的工具使用原生SwipeRefreshLayout+RecycleView實現下拉重新整理和載入更多

實現SwipeRefreshLayout+RecycleView實現重新整理 在你的xml檔案裡寫上如下程式碼: <android.support.v4.widget.SwipeRefreshLayout

HttpClientUtil工具傳送get請求和post請求

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLCo

07_資料庫建立新增c3p0操作所需的jar包編寫c3p0-config.xml檔案編寫User.java,編寫jdbcUtils.java實現操作資料庫的模板工具UserDao編寫Dao

 1建立day14資料庫,建立user.sql表: A 建立資料庫 day14 B 建立資料表 users createtable users ( id

swift4.0 資料請求工具的建立和使用(基於Alamofire)

1.首先用到的三方庫 Alamofire ——> 原來的AFNetworking的作者搞出來的東西 自己pod,不懂百度 pod 'Alamofire' 2.工具類 import UIKit import Alamofire  class