您的位置:首页 > 理论基础 > 计算机网络

httputil用http获取请求的工具类

2015-05-05 10:10 441 查看
原文:httputil用http获取请求的工具类

源代码下载地址:http://www.zuidaima.com/share/1550463738612736.htm

package com.zuidaima.xiaocan.demo.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;

/**
 * <p>Http工具类
 * 
 * <p>Http工具类,为系统提供通用Http访问操作方法:
 * 
 * <p>1、发送GET请求;
 * <p>2、发送POST请求。
 * @author www.zuidaima.com
 */
public class HttpUtil {

	/**
	 * <p>发送GET请求
	 * 
	 * @param  url GET请求地址
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 */
	public static byte[] doGet(String url) {

		return HttpUtil.doGet(url , null , null , 0);
	}

	/**
	 * <p>发送GET请求
	 * 
	 * @param  url       GET请求地址
	 * @param  headerMap GET请求头参数容器
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 */
	public static byte[] doGet(String url , Map headerMap) {

		return HttpUtil.doGet(url , headerMap , null , 0);
	}

	/**
	 * <p>发送GET请求
	 * 
	 * @param  url       GET请求地址
	 * @param  proxyUrl  代理服务器地址
	 * @param  proxyPort 代理服务器端口号
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 * @modify 窦海宁, 2012-03-19
	 */
	public static byte[] doGet(String url , String proxyUrl , int proxyPort) {

		return HttpUtil.doGet(url , null , proxyUrl , proxyPort);
	}

	/**
	 * <p>发送GET请求
	 * 
	 * @param  url       GET请求地址
	 * @param  headerMap GET请求头参数容器
	 * @param  proxyUrl  代理服务器地址
	 * @param  proxyPort 代理服务器端口号
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 * @modify 窦海宁, 2012-03-19
	 */
	public static byte[] doGet(String url , Map headerMap , String proxyUrl , int proxyPort) {

		byte[]     content    = null;
		HttpClient httpClient = new HttpClient();
		GetMethod  getMethod  = new GetMethod(url);

		if (headerMap != null) {

			//头部请求信息
			if (headerMap != null) {

				Iterator iterator = headerMap.entrySet().iterator();
				while (iterator.hasNext()) {

					Entry entry = (Entry) iterator.next();
					getMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
				}
			}
		}

		if (StringUtils.isNotBlank(proxyUrl)) {

			httpClient.getHostConfiguration().setProxy(proxyUrl , proxyPort);
		}

		//设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
		getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT , 10000);
		//postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER , new DefaultHttpMethodRetryHandler());
		InputStream inputStream = null;
		try {

			if (httpClient.executeMethod(getMethod) == HttpStatus.SC_OK) {

				//读取内容
				inputStream = getMethod.getResponseBodyAsStream();
				content     = IOUtils.toByteArray(inputStream);
			} else {

				System.err.println("Method failed: " + getMethod.getStatusLine());
			}
		} catch (IOException ex) {

			ex.printStackTrace();
		} finally {

			IOUtils.closeQuietly(inputStream);
			getMethod.releaseConnection();
		}
		return content;
	}

	/**
	 * <p>发送POST请求
	 * 
	 * @param  url          POST请求地址
	 * @param  parameterMap POST请求参数容器
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 */
	public static byte[] doPost(String url , Map parameterMap) {

		return HttpUtil.doPost(url , null , parameterMap , null , null , 0);
	}

	/**
	 * <p>发送POST请求
	 * 
	 * @param  url          POST请求地址
	 * @param  parameterMap POST请求参数容器
	 * @param  paramCharset 参数字符集名称
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 * @modify 窦海宁, 2012-05-21
	 */
	public static byte[] doPost(String url , Map parameterMap , String paramCharset) {

		return HttpUtil.doPost(url , null , parameterMap , paramCharset , null , 0);
	}

	/**
	 * <p>发送POST请求
	 * 
	 * @param  url          POST请求地址
	 * @param  headerMap    POST请求头参数容器
	 * @param  parameterMap POST请求参数容器
	 * @param  paramCharset 参数字符集名称
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 * @modify 窦海宁, 2012-05-21
	 */
	public static byte[] doPost(String url , Map headerMap , Map parameterMap , String paramCharset) {

		return HttpUtil.doPost(url , headerMap , parameterMap , paramCharset , null , 0);
	}

	/**
	 * <p>发送POST请求
	 * 
	 * @param  url          POST请求地址
	 * @param  parameterMap POST请求参数容器
	 * @param  paramCharset 参数字符集名称
	 * @param  proxyUrl     代理服务器地址
	 * @param  proxyPort    代理服务器端口号
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 */
	public static byte[] doPost(String url , Map parameterMap , String paramCharset , String proxyUrl , int proxyPort) {

		return HttpUtil.doPost(url , null , parameterMap , paramCharset , proxyUrl , proxyPort);
	}

	/**
	 * <p>发送POST请求
	 * 
	 * @param  url          POST请求地址
	 * @param  headerMap    POST请求头参数容器
	 * @param  parameterMap POST请求参数容器
	 * @param  paramCharset 参数字符集名称
	 * @param  proxyUrl     代理服务器地址
	 * @param  proxyPort    代理服务器端口号
	 * 
	 * @return 与当前请求对应的响应内容字节数组
	 * 
	 * @modify 窦海宁, 2012-05-21
	 */
	public static byte[] doPost(String url , Map headerMap , Map parameterMap , String paramCharset , String proxyUrl , int proxyPort) {

		byte[]     content    = null;
		HttpClient httpClient = new HttpClient();
		PostMethod postMethod = new PostMethod(url);

		if (StringUtils.isNotBlank(paramCharset)) {

			postMethod.getParams().setContentCharset(paramCharset);
			postMethod.getParams().setHttpElementCharset(paramCharset);
		}

		if (headerMap != null) {

			//头部请求信息
			if (headerMap != null) {

				Iterator iterator = headerMap.entrySet().iterator();
				while (iterator.hasNext()) {

					Entry entry = (Entry) iterator.next();
					postMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
				}
			}
		}

		Iterator iterator = parameterMap.keySet().iterator();
		while (iterator.hasNext()) {

			String key = (String) iterator.next();
			postMethod.addParameter(key , (String) parameterMap.get(key));
		}

		if (StringUtils.isNotBlank(proxyUrl)) {

			httpClient.getHostConfiguration().setProxy(proxyUrl , proxyPort);
		}

		//设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
		postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT , 10000);
		//postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER , new DefaultHttpMethodRetryHandler());
		InputStream inputStream = null;
		try {

			if (httpClient.executeMethod(postMethod) == HttpStatus.SC_OK) {

				//读取内容
				inputStream = postMethod.getResponseBodyAsStream();
				content     = IOUtils.toByteArray(inputStream);
			} else {

				System.err.println("Method failed: " + postMethod.getStatusLine());
			}
		} catch (IOException ex) {

			ex.printStackTrace();
		} finally {

			IOUtils.closeQuietly(inputStream);
			postMethod.releaseConnection();
		}
		return content;
	}
	
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("wd", "nima");
		byte[] b = doGet("http://www.baidu.com", map);
		System.out.println("-------------------"+new String(b));
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: