`
chenxu_8456
  • 浏览: 40683 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Java使用HttpClient进行Http相关操作

阅读更多
HttpClient可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。在本文中给出了HttpClient基础使用的说明。
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

/**
 * 本类为HTTP请求相关工具类,在该类中可以处理通用的HTTP各种请求
 * 
 * @author yuanyao
 * 
 */
@SuppressWarnings({ "rawtypes", "unchecked", "deprecation" })
public class HttpUtil {

	private String url = null;
	private HttpClient httpClient = null;
	private HttpRequestBase request = null;
	private HttpResponse response = null;

	/**
	 * HTTP请求类型
	 * 
	 * @author yuanyao
	 * 
	 */
	public enum HttpType {
		GET("Get"), POST("Post"), HEAD("Head"), PUT("Put"), DELETE("Delete"), OPTIONS(
				"Options"), TRACE("Trace"), PATCH("Patch");
		private String key;

		private HttpType(String key) {
			this.key = key;
		}

		public String getKey() {
			return key;
		}
	}

	public HttpUtil(String url) {
		this.url = url;
	}

	/**
	 * 获取HTTP请求响应内容
	 * 
	 * @param url
	 *            请求URL地址
	 * @param type
	 *            HTTP请求类型
	 * @param postParams
	 *            当请求为POST时提供的POST参数
	 * @return HTTP响应返回内容
	 * @throws Exception
	 */
	public String getHttpResponseContent(HttpType type,
			Map<String, String> postParams) throws Exception {
		HttpEntity entity = getHttpResponseEntity(type, postParams);
		String content = "";
		if (entity != null) {
			InputStream instreams = entity.getContent();
			content = convertStreamToString(instreams);
		}
		close();
		return content;
	}

	/**
	 * 返回HTTP响应结果实体
	 * 
	 * @param url
	 *            请求URL地址
	 * @param type
	 *            HTTP请求类型
	 * @param postParams
	 *            当请求为POST时提供的POST参数
	 * @return HTTP响应实体
	 * @throws Exception
	 */
	private HttpEntity getHttpResponseEntity(HttpType type,
			Map<String, String> postParams) throws Exception {
		HttpClient client = new DefaultHttpClient();
		HttpRequestBase request = getMethod(type, url);
		HttpResponse response = client.execute(request);
		if (type == HttpType.POST && postParams != null) {
			setPostParams(request, postParams);
		}
		return response.getEntity();
	}

	private void close() {
		if (request != null && !request.isAborted()) {
			request.abort();
		}
		HttpClientUtils.closeQuietly(response);
		HttpClientUtils.closeQuietly(httpClient);
	}

	/**
	 * 设置POST请求POST参数
	 * 
	 * @param request
	 *            POST请求
	 * @param postParams
	 *            POST参数
	 * @throws Exception
	 */
	private void setPostParams(HttpRequestBase request,
			Map<String, String> postParams) throws Exception {
		List<BasicNameValuePair> postData = new ArrayList<BasicNameValuePair>();
		for (Map.Entry<String, String> entry : postParams.entrySet()) {
			postData.add(new BasicNameValuePair(entry.getKey(), entry
					.getValue()));
		}
		UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData,
				HTTP.UTF_8);
		((HttpResponse) request).setEntity(entity);
	}

	private HttpRequestBase getMethod(HttpType type, String url)
			throws Exception {
		if (url == null || url.length() <= 0) {
			throw new RuntimeException("请提供HTTP请求的URL地址");
		}
		String className = "org.apache.http.client.methods.Http"
				+ type.getKey();
		Class clazz = Class.forName(className);
		return ((HttpRequestBase) clazz.getConstructor(String.class)
				.newInstance(url));
	}

	/**
	 * 从输入流中读取数据并装换为字符串输出
	 * 
	 * @param is
	 *            输入流
	 * @return 输入流读取出的字符串
	 * @throws Exception
	 */
	private String convertStreamToString(InputStream is) throws Exception {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		StringBuilder sb = new StringBuilder();
		String line = null;
		while ((line = reader.readLine()) != null) {
			sb.append(line + "\n");
		}
		is.close();
		return sb.toString().trim();
	}

	public static void main(String[] args) throws Exception {
		String url = "http://www.baidu.com";
		String jsonString = new HttpUtil(url).getHttpResponseContent(
				HttpType.GET, null);
		System.out.println("Response String: " + jsonString);
	}
}
分享到:
评论

相关推荐

    JavaHttpClient

    java的电商开发工具类,其中有HttpClient爬虫式工具类,基于Http以及Https都可以进行操作.

    Java利用HttpClient模拟POST表单操作应用及注意事项

    本文主要介绍JAVA中利用HttpClient模拟POST表单操作,希望对大家有所帮助。

    HttpClient

    安卓开发 网络请求实现类,包括HttpClient get/post 请求,和 HttpUrlConnection的操作!

    jersery RestFul web service工程 应用了httpClient demo以及日志操作源码和java 动态反射机制

    jersery RestFull web service工程 应用了httpClient demo以及日志操作源码和java 动态反射机制 整个工程用来对外提供一个简化的ceph云存储服务器的restful api 同时工程作为 学习jersery 以及简单的统一日志管理 ...

    httpclient 例子

    httpclient 编写java代码 系统自动登入别人的系统进行操作。

    HttpClient以及获取页面内容应用

    HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。 下载地址:  http://hc.apache.org/downloads.cgi 1.2特性 1. 基于标准、纯净的java语言。...

    使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Internet 上的网页,以及如何使用 HttpClient 来简化 Get ...

    common jar和httpclient jar

    common logjar和httpclient jar用于java服务器开发Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的...

    HttpHelper:对HttpClient进行封装,简化getpost操作

    ####对HttpClient进行封装,简化get/post操作,使用简单方便。 在Java开发中,HttpClient的应用非常广泛。用的多了,自然会想去把他封装一下,写一个自己的小类库,方便自己日常学习工作使用。于是,就结合工作情况...

    HttpclientHelper

    HttpCilentHelper.java 操作类

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java开源包8

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    HttpClient通过Post上传文件的实例代码

    在网上寻找之后,发现是使用HttClient来进行响应的操作,起初尝试多次依然不能传递参数和传递文件,后来发现时因为当使用HttpClient时,不能使用request.getParameter()对普通参数进行获取,而要在服务器端使用...

    solr3.6操作使用jar包

    本压缩包包含solr3.6在java环境下所有使用的jar包,如含apache-solr-solrj-3.6.2.jar,commons-httpclient-3.1.jar,commons-logging-1.1.jar,junit-4.8.2.jar,post.jar,slf4j-api-1.6.1.jar

    java开源包4

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java jdk实列宝典 光盘源代码

    12反射 是java程序开发的特征之一,允许java程序对自身进行检查,并能直接操作程序的内部属性; instanceof操作符,instanceof.java; 获取类的信息,ViewClassInfoJrame.java; 动态调用类的方法,CallMetod.java; ...

    java开源包101

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包11

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包6

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

Global site tag (gtag.js) - Google Analytics