httpclient 4.3.6/http coree-4.4自分で包装する工具類
29226 ワード
原文のリンク:http://www.cnblogs.com/jinzhiming/p/5761856.html
jarパッケージを導入する
httpclient 4.3.6/http coret-4.4
転載先:https://www.cnblogs.com/jinzhiming/p/5761856.html
jarパッケージを導入する
httpclient 4.3.6/http coret-4.4
package com.develop.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
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.HttpClientUtils;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
* jar httpclient-4.3.6/httpcore-4.4
* @author Administrator
*
*/
public class HttpClientUtil {
private static String defaultCharset = "UTF-8";//
private static int connectionRequestTimeout = 60000;
private static int connectTimeout = 60000;
private static int socketTimeout = 60000;
/**
* httpclient post ( , UTF-8)
* @param uri
* @param param string map
* @return
*/
public static String doHttpPost(String uri,Object param){
return doHttpPost(uri, param, defaultCharset);
}
/**
* httpclient post
* @param uri
* @param param string map
* @param charset
* @return
*/
public static String doHttpPost(String uri,Object param,String charset){
if(uri==null||"".equals(uri)){
System.out.println(" uri !");
return null;
}
int index = uri.indexOf("?");
if(index>-1){
uri = uri.substring(0, index);
}
CloseableHttpClient httpClient = createHttpClient(uri);
HttpPost httpPost = new HttpPost(uri);
httpPost.setConfig(RequestConfig.custom()
.setConnectionRequestTimeout(connectionRequestTimeout)
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
.build());
httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded;charset="+charset);
// , ,
httpPost.setHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
// httpPost.getParams().setParameter(HttpHeaders.USER_AGENT,
// "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");// header ,
// HttpEntity
HttpEntity requestEntity = null;
if(param!=null&&!"".equals(param)){
requestEntity = getRequestEntity(param,charset);
httpPost.setEntity(requestEntity);
}
CloseableHttpResponse response = null;
HttpEntity responseEntity = null;
try {
response = httpClient.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
System.out.println("HttpClientUtil(doHttpPost) statusCode:"+statusCode);
if(statusCode!=HttpStatus.SC_OK){
return null;
}
responseEntity = response.getEntity();
String result = EntityUtils.toString(responseEntity, charset);
System.out.println("HttpClientUtil(doHttpPost) info:"+result);
return result;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
EntityUtils.consume(responseEntity);
} catch (IOException e) {
e.printStackTrace();
}
HttpClientUtils.closeQuietly(response);
try {
EntityUtils.consume(requestEntity);
} catch (IOException e) {
e.printStackTrace();
}
HttpClientUtils.closeQuietly(httpClient);
}
return null;
}
/**
* httpEntity
* @param param
* @return
*/
private static HttpEntity getRequestEntity(Object param,String charset){
if(param==null){
return null;
}
if(param instanceof String){
String paramStr = (String)param;
int index = paramStr.indexOf("?");//
if(index>-1){
paramStr = paramStr.substring(index+1);
}
StringEntity stringEntity = new StringEntity(paramStr,charset);
stringEntity.setContentType("application/x-www-form-urlencoded;charset="+charset);
return stringEntity;
}else if(param instanceof Map){
Map paramMap = (Map)param;
int paramSize = paramMap.size();
if(paramSize==0){
return null;
}
List list = new ArrayList(paramSize);
Iterator iterator = paramMap.keySet().iterator();
while(iterator.hasNext()){
Object key = iterator.next();
Object value = paramMap.get(key);
NameValuePair nameValuePair = new BasicNameValuePair(key.toString(), value.toString());
list.add(nameValuePair);
}
UrlEncodedFormEntity urlEncodedFormEntity = null;
try {
urlEncodedFormEntity = new UrlEncodedFormEntity(list,charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return urlEncodedFormEntity;
}
return null;
}
/**
* httpclient get ( , UTF-8)
* @param uri
* @param param
* @return
*/
public static String doHttpGet(String uri,String param){
return doHttpGet(uri,param ,defaultCharset);
}
/**
* httpclient get
* @param uri
* @param param
* @param charset
* @return
*/
public static String doHttpGet(String uri,String param,String charset){
if(uri==null||"".equals(uri)){
System.out.println(" uri !");
return null;
}
int index = uri.indexOf("?");
if(index>-1){
uri = uri.substring(0, index);
}
uri += encodeParam(param, charset);
CloseableHttpClient httpClient = createHttpClient(uri);
HttpGet httpGet = new HttpGet(uri);
httpGet.setConfig(RequestConfig.custom()
.setConnectionRequestTimeout(connectionRequestTimeout)
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
.build());
httpGet.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded;charset="+charset);
// , ,
httpGet.setHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
// httpGet.getParams().setParameter(HttpHeaders.USER_AGENT,
// "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");// header ,
CloseableHttpResponse response = null;
HttpEntity responseEntity = null;
try {
response = httpClient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
System.out.println("HttpClientUtil(doHttpGet) statusCode:"+statusCode);
if(statusCode!=HttpStatus.SC_OK){
return null;
}
responseEntity = response.getEntity();
String result = EntityUtils.toString(responseEntity, charset);
System.out.println("HttpClientUtil(doHttpGet) info:"+result);
return result;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
EntityUtils.consume(responseEntity);
} catch (IOException e) {
e.printStackTrace();
}
HttpClientUtils.closeQuietly(response);
HttpClientUtils.closeQuietly(httpClient);
}
return null;
}
/**
* get
* @param param
* @param charset
* @return
*/
private static String encodeParam(String param,String charset){
if(param==null){
return "";
}
int index = param.indexOf("?");//
if(index>-1){
param = param.substring(index+1);
}
if(param.length()==0){
return "";
}
String[] keyAndValues = param.split("&");
if(keyAndValues==null||keyAndValues.length==0){
return "";
}
String encodedParam = "";
int count = 0;
for(String keyAndValue:keyAndValues){
count ++;
String[] arr = keyAndValue.split("=",2);
if(arr==null||arr.length==0){
System.out.println(" ("+keyAndValue+") !");
continue;
}
String key = arr[0];
String value = arr[1];
if("null".equals(value)){// null,
value = "";
}
if(value!=null&&!"".equals(value)){
try {
value = URLEncoder.encode(value, charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
encodedParam += (key +"="+ value);
if(count<keyAndValues.length){
encodedParam += "&";
}
}
if(encodedParam.length()!=0){
encodedParam = "?"+ encodedParam;
}
return encodedParam;
}
/**
* HttpClient
* @param uri
* @return
*/
private static CloseableHttpClient createHttpClient(String uri){
if(uri!=null&&uri.indexOf("https")>-1){
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
//
@Override
public boolean isTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
return true;
}
}).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
}
return HttpClients.createDefault();
}
}
転載先:https://www.cnblogs.com/jinzhiming/p/5761856.html