【Http访问工具类】基于HttpClient4.5.1实现 --(1)

原文链接: https://blog.csdn.net/wangnan537/article/details/50374061

本工具类基于httpclient4.5.1实现,点击此处查看官方版HttpClient4.5.1手册。

 

1. pom.xml中依赖包设置


	org.apache.httpcomponents
	httpclient
	4.5.1

2. HttpClient工具类

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Map;
 
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
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;
import org.apache.http.util.EntityUtils;
 
/**
 * 
 * @author Nan 2015-11
 */
public class HttpClientUtil {
	private static PoolingHttpClientConnectionManager cm;
	private static String EMPTY_STR = "";
	private static String UTF_8 = "UTF-8";
 
	private static void init() {
		if (cm == null) {
			cm = new PoolingHttpClientConnectionManager();
			cm.setMaxTotal(50);// 整个连接池最大连接数
			cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2
		}
	}
 
	/**
	 * 通过连接池获取HttpClient
	 * 
	 * @return
	 */
	private static CloseableHttpClient getHttpClient() {
		init();
		return HttpClients.custom().setConnectionManager(cm).build();
	}
 
	/**
	 * 
	 * @param url
	 * @return
	 */
	public static String httpGetRequest(String url) {
		HttpGet httpGet = new HttpGet(url);
		return getResult(httpGet);
	}
 
	public static String httpGetRequest(String url, Map params) throws URISyntaxException {
		URIBuilder ub = new URIBuilder();
		ub.setPath(url);
 
		ArrayList pairs = covertParams2NVPS(params);
		ub.setParameters(pairs);
 
		HttpGet httpGet = new HttpGet(ub.build());
		return getResult(httpGet);
	}
 
	public static String httpGetRequest(String url, Map headers, Map params)
			throws URISyntaxException {
		URIBuilder ub = new URIBuilder();
		ub.setPath(url);
 
		ArrayList pairs = covertParams2NVPS(params);
		ub.setParameters(pairs);
 
		HttpGet httpGet = new HttpGet(ub.build());
		for (Map.Entry param : headers.entrySet()) {
			httpGet.addHeader(param.getKey(), String.valueOf(param.getValue()));
		}
		return getResult(httpGet);
	}
 
	public static String httpPostRequest(String url) {
		HttpPost httpPost = new HttpPost(url);
		return getResult(httpPost);
	}
 
	public static String httpPostRequest(String url, Map params) throws UnsupportedEncodingException {
		HttpPost httpPost = new HttpPost(url);
		ArrayList pairs = covertParams2NVPS(params);
		httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));
		return getResult(httpPost);
	}
 
	public static String httpPostRequest(String url, Map headers, Map params)
			throws UnsupportedEncodingException {
		HttpPost httpPost = new HttpPost(url);
 
		for (Map.Entry param : headers.entrySet()) {
			httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
		}
 
		ArrayList pairs = covertParams2NVPS(params);
		httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));
 
		return getResult(httpPost);
	}
 
	private static ArrayList covertParams2NVPS(Map params) {
		ArrayList pairs = new ArrayList();
		for (Map.Entry param : params.entrySet()) {
			pairs.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
		}
 
		return pairs;
	}
 
	/**
	 * 处理Http请求
	 * 
	 * @param request
	 * @return
	 */
	private static String getResult(HttpRequestBase request) {
		// CloseableHttpClient httpClient = HttpClients.createDefault();
		CloseableHttpClient httpClient = getHttpClient();
		try {
			CloseableHttpResponse response = httpClient.execute(request);
			// response.getStatusLine().getStatusCode();
			HttpEntity entity = response.getEntity();
			if (entity != null) {
				// long len = entity.getContentLength();// -1 表示长度未知
				String result = EntityUtils.toString(entity);
				response.close();
				// httpClient.close();
				return result;
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
 
		}
 
		return EMPTY_STR;
	}
 
}

 

你可能感兴趣的:(工具)