httpclient的get和post请求

Posted jiangzhongwei_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpclient的get和post请求相关的知识,希望对你有一定的参考价值。

httpclient maven主要依赖:

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


封装的工具类:

package com.cbj.util;

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;

public class HttpClientUtils 
	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<String, Object> params) throws URISyntaxException 
		URIBuilder ub = new URIBuilder();
		ub.setPath(url);

		ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
		ub.setParameters(pairs);

		HttpGet httpGet = new HttpGet(ub.build());
		return getResult(httpGet);
	

	public static String httpGetRequest(String url, Map<String, Object> headers, Map<String, Object> params)
			throws URISyntaxException 
		URIBuilder ub = new URIBuilder();
		ub.setPath(url);
		if(params != null) 
			ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
			ub.setParameters(pairs);
		
		HttpGet httpGet = new HttpGet(ub.build());
		if (headers != null) 
			for (Map.Entry<String, Object> 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<String, Object> params) throws UnsupportedEncodingException 
		HttpPost httpPost = new HttpPost(url);
		ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
		httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));
		return getResult(httpPost);
	

	public static String httpPostRequest(String url, Map<String, Object> headers, Map<String, Object> params)
			throws UnsupportedEncodingException 
		HttpPost httpPost = new HttpPost(url);
		if(headers != null) 
			for (Map.Entry<String, Object> param : headers.entrySet()) 
				httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
			
		
		if(params != null) 
			ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
			httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));
		

		return getResult(httpPost);
	

	private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, Object> params) 
		ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>();
		for (Map.Entry<String, Object> 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();
				System.out.println(result);
				return result;
			
		 catch (ClientProtocolException e) 
			e.printStackTrace();
		 catch (IOException e) 
			e.printStackTrace();
		 finally 

		

		return EMPTY_STR;
	

		
	



以上是关于httpclient的get和post请求的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient GET和POST请求

HttpClient 4.5.3( get和post请求)

HttpClient的post请求和get请求

HttpClient和AsynchttpClient的get与post请求方式

如何通过python twisted HTTPClient生成POST和GET请求?

httpclient的get和post请求