`
chenxu_8456
  • 浏览: 42087 次
  • 性别: 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);
	}
}
分享到:
评论

相关推荐

    Java 使用HttpClient保持SESSION状态

    在Java编程中,HttpClient是一个强大的库,用于执行HTTP请求,特别是在需要进行复杂的HTTP操作或大量HTTP请求时。在处理Web应用程序时,有时我们需要保持用户的登录状态,即SESSION状态。这通常涉及到Cookie管理,...

    Java中Httpclient需要的jar包(httpclient.jar,httpcore.jar及commons-logging.jar)

    在标题和描述中提到的"Java中Httpclient需要的jar包(httpclient.jar,httpcore.jar及commons-logging.jar)",是使用HttpClient库时必须包含的三个关键依赖文件。 首先,`httpclient.jar`是Apache HttpClient的核心库...

    Java HttpClient 全部的jar包

    在Java项目中,使用HttpClient可以实现与Web服务器的高效通信。下面将详细介绍这12个jar包的作用及其在HttpClient中的功能: 1. `commons-beanutils-1.8.0.jar`: Apache Commons BeanUtils库提供了对Java Beans属性...

    java实现httpClient样例

    这个样例项目旨在帮助初学者理解如何在Java中使用HttpClient来与Web服务器进行交互。 在JavaHttpProject这个项目中,你可以找到以下关键知识点: 1. **HttpClient的创建**:首先,你需要创建一个HttpClient实例。...

    java实现HttpClient异步请求资源的方法

    以下是一个使用HttpClient进行异步请求的Java示例: ```java import java.util.concurrent.CountDownLatch; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org....

    java 中HttpClient传输xml字符串实例详解

    Java中的HttpClient是一个强大的HTTP客户端库,常用于与服务器进行数据交互。在本实例中,我们将讲解如何使用HttpClient来传输XML字符串。首先,我们需要确保引入了正确的依赖,包括Apache HttpClient、HttpMime、...

    使用HttpClient必须的jar包

    HttpClient是Apache基金会开发的一个Java库,它提供了对HTTP协议的强大支持,使得开发者可以在Java应用程序中方便地进行HTTP通信。在Java项目中使用HttpClient时,为了确保功能的完整性和正确性,通常需要引入一系列...

    java 调用webservice使用HttpClient和XFire两种方式

    在Java开发中,有时我们需要与外部服务进行交互,如发送短信、获取数据等,这时就会用到Web Service。本文将详细介绍如何使用HttpClient和XFire这两种不同的库来调用Web Service,特别是针对短信接口的调用。 首先...

    httpClient调用wcf

    在Java中,HttpClient库是一个常用的工具,它使得开发者能够方便地执行GET、POST等HTTP方法,进行Web服务的调用。 WCF是.NET框架的一部分,用于构建面向服务的应用程序。它提供了一种统一的方式,来创建、部署和...

    Java网络通信之HttpClient

    本篇将详细探讨`Java网络通信之HttpClient`的相关知识点,以及如何通过`HttpClientTest`进行实践操作。 首先,让我们了解什么是Apache HttpClient。HttpClient是一个开放源代码的Java库,它允许开发人员执行HTTP和...

    java_httpclient

    这个工具包在Java社区中广泛使用,尤其是在需要与Web服务进行交互或者进行自动化测试时。在这个场景中,我们关注的是两个特定的版本:`java_httpclient-4.2.5.jar` 和 `java_httpcore-4.4.4.jar`。这两个库是Apache ...

    Java使用httpclient5操作示例JavaHttpClientExample

    代码使用了Apache HttpClient 5.x版本的API,创建一个默认的HttpClient实例,构建一个GET请求,并发送该请求到指定的URL,最后打印出响应内容。需在pom中导入如下jar包: &lt;groupId&gt;org.apache.httpcomponents....

    HttpClient包及例子

    HttpClient是Apache基金会开发的一个Java库,它为Java开发者提供了一种简单且强大的API来执行HTTP请求,无论是GET、POST还是其他HTTP方法。这个库的主要目标是简化与HTTP服务器的交互,使得开发人员能够轻松地创建...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...

    HttpClient使用HttpGet进行json数据传输(所使用的jar.zip)

    在实际应用中,使用HttpClient进行JSON数据传输可能会涉及更多细节,如连接池管理、重试策略、超时设置等。要深入理解HttpClient的用法,可以参考官方文档或博客(如给出的链接),学习更多高级特性和最佳实践。

    JavaHttpClient实例

    本实例将深入探讨如何在Java中使用HttpClient进行网络通信。 首先,你需要在项目中引入HttpClient的相关依赖。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.httpcomponents ...

    commons-httpclient,java中使用httpclient中使用的扩展工具

    同时,注意HttpClient库已经不再更新,对于新的Java项目,推荐使用现代化的HTTP客户端库,如Apache HttpClient的后继者Apache HTTP Components HttpClient 4.x系列,或者使用Java标准库的`java.net.http.HttpClient`...

    java使用httpclient发送post请求示例

    Java 使用 HttpClient 发送 POST 请求是网络编程中常见的任务,尤其在与 Web 服务进行交互时。Apache HttpClient 是一个强大的库,允许 Java 开发者轻松地执行 HTTP 请求。在这个示例中,我们将深入探讨如何使用 ...

    JAVA发送HttpClient请求及接收请求完整代码实例

    以上就是使用Java HttpClient进行HTTP请求的基本操作。在实际应用中,你可能需要处理更复杂的场景,例如设置超时、处理重定向、管理Cookie等。同时,SpringMVC框架提供了与HttpClient集成的便捷方式,可以更方便地在...

    HttpClient发送http请求(post+get)需要的jar包+内符java代码案例+注解详解

    本篇将详细介绍如何使用HttpClient发送HTTP请求,包括POST和GET方法,同时提供相关的jar包依赖以及Java代码示例,并对关键代码进行注解解释。 一、HttpClient库的引入 在Java项目中,首先需要添加HttpClient的jar包...

Global site tag (gtag.js) - Google Analytics