packagecom.test;importjava.io.File;importjava.io.IOException;importjava.security.KeyManagementException;importjava.security.KeyStoreException;importjava.security.NoSuchAlgorithmException;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.apache.http.HttpEntity;importorg.apache.http.HttpStatus;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.config.Registry;importorg.apache.http.config.RegistryBuilder;importorg.apache.http.conn.socket.ConnectionSocketFactory;importorg.apache.http.conn.socket.PlainConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLContextBuilder;importorg.apache.http.conn.ssl.TrustSelfSignedStrategy;importorg.apache.http.entity.ContentType;importorg.apache.http.entity.StringEntity;importorg.apache.http.entity.mime.MultipartEntityBuilder;importorg.apache.http.entity.mime.content.FileBody;importorg.apache.http.entity.mime.content.StringBody;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.DefaultHttpRequestRetryHandler;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;importorg.apache.http.util.EntityUtils;/***
*@authorH__D
* @date 2016年10月19日 上午11:27:25
**/
public classHttpClientUtil {//utf-8字符编码
public static final String CHARSET_UTF_8 = "utf-8";//HTTP内容类型。
public static final String CONTENT_TYPE_TEXT_HTML = "text/xml";//HTTP内容类型。相当于form表单的形式,提交数据
public static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded";//HTTP内容类型。相当于form表单的形式,提交数据
public static final String CONTENT_TYPE_JSON_URL = "application/json;charset=utf-8";//连接管理器
private staticPoolingHttpClientConnectionManager pool;//请求配置
private staticRequestConfig requestConfig;static{try{//System.out.println("初始化HttpClientTest~~~开始");
SSLContextBuilder builder = newSSLContextBuilder();
builder.loadTrustMaterial(null, newTrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf= newSSLConnectionSocketFactory(
builder.build());//配置同时支持 HTTP 和 HTPPS
Registry socketFactoryRegistry = RegistryBuilder.create().register("http", PlainConnectionSocketFactory.getSocketFactory()).register("https", sslsf).build();//初始化连接管理器
pool = newPoolingHttpClientConnectionManager(
socketFactoryRegistry);//将最大连接数增加到200,实际项目最好从配置文件中读取这个值
pool.setMaxTotal(200);//设置最大路由
pool.setDefaultMaxPerRoute(2);//根据默认超时限制初始化requestConfig
int socketTimeout = 10000;int connectTimeout = 10000;int connectionRequestTimeout = 10000;
requestConfig=RequestConfig.custom().setConnectionRequestTimeout(
connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout(
connectTimeout).build();//System.out.println("初始化HttpClientTest~~~结束");
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}catch(KeyStoreException e) {
e.printStackTrace();
}catch(KeyManagementException e) {
e.printStackTrace();
}//设置请求超时时间
requestConfig = RequestConfig.custom().setSocketTimeout(50000).setConnectTimeout(50000)
.setConnectionRequestTimeout(50000).build();
}public staticCloseableHttpClient getHttpClient() {
CloseableHttpClient httpClient=HttpClients.custom()//设置连接池管理
.setConnectionManager(pool)//设置请求配置
.setDefaultRequestConfig(requestConfig)//设置重试次数
.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
.build();returnhttpClient;
}/*** 发送Post请求
*
*@paramhttpPost
*@return
*/
private staticString sendHttpPost(HttpPost httpPost) {
CloseableHttpClient httpClient= null;
CloseableHttpResponse response= null;//响应内容
String responseContent = null;try{//创建默认的httpClient实例.
httpClient =getHttpClient();//配置请求信息
httpPost.setConfig(requestConfig);//执行请求
response =httpClient.execute(httpPost);//得到响应实例
HttpEntity entity =response.getEntity();//可以获得响应头//Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);//for (Header header : headers) {//System.out.println(header.getName());//}//得到响应类型//System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());//判断响应状态
if (response.getStatusLine().getStatusCode() >= 300) {throw newException("HTTP Request is not success, Response code is " +response.getStatusLine().getStatusCode());
}if (HttpStatus.SC_OK ==response.getStatusLine().getStatusCode()) {
responseContent=EntityUtils.toString(entity, CHARSET_UTF_8);
EntityUtils.consume(entity);
}
}catch(Exception e) {
e.printStackTrace();
}finally{try{//释放资源
if (response != null) {
response.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}returnresponseContent;
}/*** 发送Get请求
*
*@paramhttpGet
*@return
*/
private staticString sendHttpGet(HttpGet httpGet) {
CloseableHttpClient httpClient= null;
CloseableHttpResponse response= null;//响应内容
String responseContent = null;try{//创建默认的httpClient实例.
httpClient =getHttpClient();//配置请求信息
httpGet.setConfig(requestConfig);//执行请求
response =httpClient.execute(httpGet);//得到响应实例
HttpEntity entity =response.getEntity();//可以获得响应头//Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);//for (Header header : headers) {//System.out.println(header.getName());//}//得到响应类型//System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());//判断响应状态
if (response.getStatusLine().getStatusCode() >= 300) {throw newException("HTTP Request is not success, Response code is " +response.getStatusLine().getStatusCode());
}if (HttpStatus.SC_OK ==response.getStatusLine().getStatusCode()) {
responseContent=EntityUtils.toString(entity, CHARSET_UTF_8);
EntityUtils.consume(entity);
}
}catch(Exception e) {
e.printStackTrace();
}finally{try{//释放资源
if (response != null) {
response.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}returnresponseContent;
}/*** 发送 post请求
*
*@paramhttpUrl
* 地址*/
public staticString sendHttpPost(String httpUrl) {//创建httpPost
HttpPost httpPost = newHttpPost(httpUrl);returnsendHttpPost(httpPost);
}/*** 发送 get请求
*
*@paramhttpUrl*/
public staticString sendHttpGet(String httpUrl) {//创建get请求
HttpGet httpGet = newHttpGet(httpUrl);returnsendHttpGet(httpGet);
}/*** 发送 post请求(带文件)
*
*@paramhttpUrl
* 地址
*@parammaps
* 参数
*@paramfileLists
* 附件*/
public static String sendHttpPost(String httpUrl, Map maps, ListfileLists) {
HttpPost httpPost= new HttpPost(httpUrl);//创建httpPost
MultipartEntityBuilder meBuilder =MultipartEntityBuilder.create();if (maps != null) {for(String key : maps.keySet()) {
meBuilder.addPart(key,newStringBody(maps.get(key), ContentType.TEXT_PLAIN));
}
}if (fileLists != null) {for(File file : fileLists) {
FileBody fileBody= newFileBody(file);
meBuilder.addPart("files", fileBody);
}
}
HttpEntity reqEntity=meBuilder.build();
httpPost.setEntity(reqEntity);returnsendHttpPost(httpPost);
}/*** 发送 post请求
*
*@paramhttpUrl
* 地址
*@paramparams
* 参数(格式:key1=value1&key2=value2)
**/
public staticString sendHttpPost(String httpUrl, String params) {
HttpPost httpPost= new HttpPost(httpUrl);//创建httpPost
try{//设置参数
if (params != null && params.trim().length() > 0) {
StringEntity stringEntity= new StringEntity(params, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_FORM_URL);
httpPost.setEntity(stringEntity);
}
}catch(Exception e) {
e.printStackTrace();
}returnsendHttpPost(httpPost);
}/*** 发送 post请求
*
*@parammaps
* 参数*/
public static String sendHttpPost(String httpUrl, Mapmaps) {
String parem=convertStringParamter(maps);returnsendHttpPost(httpUrl, parem);
}/*** 发送 post请求 发送json数据
*
*@paramhttpUrl
* 地址
*@paramparamsJson
* 参数(格式 json)
**/
public staticString sendHttpPostJson(String httpUrl, String paramsJson) {
HttpPost httpPost= new HttpPost(httpUrl);//创建httpPost
try{//设置参数
if (paramsJson != null && paramsJson.trim().length() > 0) {
StringEntity stringEntity= new StringEntity(paramsJson, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_JSON_URL);
httpPost.setEntity(stringEntity);
}
}catch(Exception e) {
e.printStackTrace();
}returnsendHttpPost(httpPost);
}/*** 发送 post请求 发送xml数据
*
*@paramhttpUrl 地址
*@paramparamsXml 参数(格式 Xml)
**/
public staticString sendHttpPostXml(String httpUrl, String paramsXml) {
HttpPost httpPost= new HttpPost(httpUrl);//创建httpPost
try{//设置参数
if (paramsXml != null && paramsXml.trim().length() > 0) {
StringEntity stringEntity= new StringEntity(paramsXml, "UTF-8");
stringEntity.setContentType(CONTENT_TYPE_TEXT_HTML);
httpPost.setEntity(stringEntity);
}
}catch(Exception e) {
e.printStackTrace();
}returnsendHttpPost(httpPost);
}/*** 将map集合的键值对转化成:key1=value1&key2=value2 的形式
*
*@paramparameterMap
* 需要转化的键值对集合
*@return字符串*/
public staticString convertStringParamter(Map parameterMap) {
StringBuffer parameterBuffer= newStringBuffer();if (parameterMap != null) {
Iterator iterator=parameterMap.keySet().iterator();
String key= null;
String value= null;while(iterator.hasNext()) {
key=(String) iterator.next();if (parameterMap.get(key) != null) {
value=(String) parameterMap.get(key);
}else{
value= "";
}
parameterBuffer.append(key).append("=").append(value);if(iterator.hasNext()) {
parameterBuffer.append("&");
}
}
}returnparameterBuffer.toString();
}public static void main(String[] args) throwsException {
System.out.println(sendHttpGet("http://www.baidu.com"));
}
}