java http 请求, 通过HTTPClient这种第三方的开源框架去实现.

工作中用到的一个http请求工具类

package com.qiantu.core.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSON;

/**
 * @date 2015-05-31 上午9:56:10
 * @author xuning
 * 
 */
public class HttpUtil {

	private static final String DEFAULT_ENCODING = "UTF-8";

	/**
	 * GET方式请求
	 * 
	 * @param uri
	 *            服务器的uri要用物理IP或域名,不识别localhost或127.0.0.1形式!
	 * @return
	 * @throws IOException
	 * @throws ClientProtocolException
	 */
	public static String get(String uri) throws ClientProtocolException,
			IOException {
		HttpGet httpGet = new HttpGet(uri);
		HttpClient httpClient = new DefaultHttpClient();
		HttpResponse httpResponse = httpClient.execute(httpGet);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
			String result = EntityUtils.toString(httpResponse.getEntity());
			return EntityUtils.toString(httpResponse.getEntity());
		}
		throw new IOException("status is " + statusCode);
	}

	/**
	 * GET方式请求
	 * 
	 * @param uri
	 *            服务器的uri要用物理IP或域名,不识别localhost或127.0.0.1形式!
	 * @return
	 * @throws IOException
	 * @throws ClientProtocolException
	 */
	public static String get(String uri, Map<String, String> paramMap)
			throws ClientProtocolException, IOException {

		StringBuilder sb = new StringBuilder(uri);
		if (paramMap != null) {
			boolean isBegin = true;
			for (String key : paramMap.keySet()) {
				if (isBegin) {
					sb.append("?").append(key).append("=")
							.append(paramMap.get(key));
					isBegin = false;
				} else {
					sb.append("&").append(key).append("=")
							.append(paramMap.get(key));
				}

			}
		}
		HttpGet httpGet = new HttpGet(sb.toString());
		HttpClient httpClient = new DefaultHttpClient();
		HttpResponse httpResponse = httpClient.execute(httpGet);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
//			String result = EntityUtils.toString(httpResponse.getEntity());
			return EntityUtils.toString(httpResponse.getEntity());
		}
		throw new IOException("status is " + statusCode);
	}

	/**
	 * GET方式请求https
	 * 
	 * @param uri
	 *            服务器的uri要用物理IP或域名,不识别localhost或127.0.0.1形式!
	 * @return
	 * @throws IOException
	 * @throws ClientProtocolException
	 */
	public static String httpsGet(String uri, String keyFile, String keyPwd)
			throws Exception {
		HttpGet httpGet = new HttpGet(uri);
		HttpClient httpClient = newHttpsClient(keyFile, keyPwd);
		HttpResponse httpResponse = httpClient.execute(httpGet);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
//			String result = EntityUtils.toString(httpResponse.getEntity(),
//					DEFAULT_ENCODING);
			return  EntityUtils.toString(httpResponse.getEntity(),
					DEFAULT_ENCODING);
		}
		throw new IOException("status is " + statusCode);
	}

	/**
	 * POST方式请求
	 * 
	 * @param uri
	 *            服务器的uri要用物理IP或域名,不识别localhost或127.0.0.1形式!
	 * @param paramMap
	 * @return
	 * @throws IOException
	 * @throws ClientProtocolException
	 */
	public static String post(String uri, Map<String, String> paramMap)
			throws ClientProtocolException, IOException {
		HttpPost httpPost = new HttpPost(uri);
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		if (paramMap != null) {
			for (String key : paramMap.keySet()) {
				params.add(new BasicNameValuePair(key, paramMap.get(key)));
			}
			httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
		}
		HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
			return EntityUtils.toString(httpResponse.getEntity(),
					DEFAULT_ENCODING);
		}
		throw new IOException("status is " + statusCode);
	}

	/**
	 * POST方式请求,UTF-8编码发送内容
	 * 
	 * @param uri
	 * @param paramMap
	 * @return
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public static String postEncoding(String uri, Map<String, String> paramMap)
			throws ClientProtocolException, IOException {
		HttpPost httpPost = new HttpPost(uri);
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		if (paramMap != null) {
			for (String key : paramMap.keySet()) {
				params.add(new BasicNameValuePair(key, paramMap.get(key)));
			}
			httpPost.setEntity(new UrlEncodedFormEntity(params,
					DEFAULT_ENCODING));
		}
		HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
			return EntityUtils.toString(httpResponse.getEntity(),
					DEFAULT_ENCODING);
		}
		throw new IOException("status is " + statusCode);
	}

	/**
	 * POST方式请求
	 * 
	 * @param uri
	 *            服务器的uri要用物理IP或域名,不识别localhost或127.0.0.1形式!
	 * @param paramMap
	 * @param headers
	 * @return
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public static String post(String uri, Map<String, String> paramMap,
			Map<String, String> headers) throws ClientProtocolException,
			IOException {
		HttpPost httpPost = new HttpPost(uri);
		if (headers != null) {
			for (String key : headers.keySet()) {
				httpPost.setHeader(key, headers.get(key));
			}
		}
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		if (paramMap != null) {
			for (String key : paramMap.keySet()) {
				params.add(new BasicNameValuePair(key, paramMap.get(key)));
			}
			httpPost.setEntity(new UrlEncodedFormEntity(params,
					DEFAULT_ENCODING));
		}
		HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
			return EntityUtils.toString(httpResponse.getEntity(),
					DEFAULT_ENCODING);
		}
		throw new IOException("status is " + statusCode);
	}

	/**
	 * POST方式请求https
	 * 
	 * @param uri
	 *            服务器的uri要用物理IP或域名,不识别localhost或127.0.0.1形式!
	 * @param paramMap
	 * @return
	 * @throws IOException
	 * @throws ClientProtocolException
	 */
	public static String httpsPost(String uri, Map<String, String> paramMap,
			String keyFile, String keyPwd) throws ClientProtocolException,
			IOException, Exception {
		HttpPost httpPost = new HttpPost(uri);
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		if (paramMap != null) {
			for (String key : paramMap.keySet()) {
				params.add(new BasicNameValuePair(key, paramMap.get(key)));
			}
			httpPost.setEntity(new UrlEncodedFormEntity(params,
					DEFAULT_ENCODING));
		}
		HttpResponse httpResponse = newHttpsClient(keyFile, keyPwd).execute(
				httpPost);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
			return EntityUtils.toString(httpResponse.getEntity());
		}
		throw new IOException("status is " + statusCode);
	}

	/*
	 * 新建httpsClient
	 */
	private static HttpClient newHttpsClient(String keyFile, String keyPwd)
			throws Exception {
		KeyStore trustStore = KeyStore.getInstance("BKS");
		trustStore.load(new FileInputStream(new File(keyFile)),
				keyPwd.toCharArray());
		SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
		Scheme sch = new Scheme("https", socketFactory, 8443);
		HttpClient client = new DefaultHttpClient();
		client.getConnectionManager().getSchemeRegistry().register(sch);
		return client;
	}

	/**
	 * post请求发送传输obj对象
	 * 
	 * @param uri
	 * @param paramMap
	 * @return
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public static String postOfObject(String uri, Object obj)
			throws ClientProtocolException, IOException {
		String params = JSON.toJSONString(obj);
		return HttpUtil.postJson(uri, params);

	}

	/**
	 * 针对http传输json数据处理
	 * 
	 * @param uri
	 * @param parameters
	 * @return
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public static String postJson(String uri, String parameters)
			throws ClientProtocolException, IOException {
		HttpPost httpPost = new HttpPost(uri);
		if (parameters != null) {
			StringEntity entity = new StringEntity(parameters);
			entity.setContentEncoding("UTF-8");
			entity.setContentType("application/json");
			httpPost.setEntity(entity);
		}
		HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
			return EntityUtils.toString(httpResponse.getEntity(),
					DEFAULT_ENCODING);
		}
		throw new IOException("status is " + statusCode);
	}

	/**
	 * 针对http传输json数据处理
	 * 
	 * @param uri
	 * @param parameters
	 * @return
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public static String postByJson(String uri, String parameters)
			throws ClientProtocolException, IOException {
		HttpPost httpPost = new HttpPost(uri);
		if (parameters != null) {
			StringEntity entity = new StringEntity(parameters,"UTF-8");
			entity.setContentEncoding("UTF-8");
			entity.setContentType("application/json");
			httpPost.setEntity(entity);
		}
		HttpResponse httpResponse = new DefaultHttpClient().execute(httpPost);
		int statusCode;
		if ((statusCode = httpResponse.getStatusLine().getStatusCode()) == 200) {
			return EntityUtils.toString(httpResponse.getEntity(),
					DEFAULT_ENCODING);
		}
		throw new IOException("status is " + statusCode);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_14861089/article/details/79786113
今日推荐