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

httpclient调用工具类

阅读更多

日常工作中,经常会遇到一些需要调用http协议接口的情况,下面整理一个用apache的httpclient访问http的工具类:

package com.hx.imweb.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;

import com.hx.imweb.service.ConfigParamLoadService;

/**
 * 
 * httpclient访问http接口的工具类
 * 
 * @author minux
 * 
 */
public class HttpClientUtils {

	public static final Logger logger = Logger.getLogger(HttpClientUtils.class);
	private static Map<String, String> headers = new HashMap<String, String>();
	static {
		headers.put("User-Agent",
				"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2)");
		headers.put("Accept-Language", "zh-cn,zh;q=0.5");
		headers.put("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
		headers.put(
				"Accept",
				" image/gif, image/x-xbitmap, image/jpeg, "
						+ "image/pjpeg, application/x-silverlight, application/vnd.ms-excel, "
						+ "application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");
		headers.put("Content-Type", "application/x-www-form-urlencoded");
		headers.put("Accept-Encoding", "gzip, deflate");
	}

	/**
	 * 异常或者没拿到返回结果的情况下,result为""
	 * 
	 * @param url
	 * @param param
	 * @return
	 */
	public static String httpPost(String url, Map<String, Object> param) {
		logger.info("httpPost URL [" + url + "] start ");
		DefaultHttpClient httpclient = null;
		HttpPost httpPost = null;
		HttpResponse response = null;
		HttpEntity entity = null;
		String result = "";
		StringBuffer suf = new StringBuffer();
		try {
			httpclient = new DefaultHttpClient();
			// 设置cookie的兼容性---考虑是否需要
			httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
					CookiePolicy.BROWSER_COMPATIBILITY);
			httpPost = new HttpPost(url);
			// 设置各种头信息
			for (Entry<String, String> entry : headers.entrySet()) {
				httpPost.setHeader(entry.getKey(), entry.getValue());
			}
			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
			// 传入各种参数
			if (null != param) {
				for (Entry<String, Object> set : param.entrySet()) {
					String key = set.getKey();
					String value = set.getValue() == null ? "" : set.getValue()
							.toString();
					nvps.add(new BasicNameValuePair(key, value));
					suf.append(" [" + key + "-" + value + "] ");
				}
			}
			logger.info("param " + suf.toString());
			httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
			// 设置连接超时时间
			HttpConnectionParams.setConnectionTimeout(httpclient.getParams(),
					ConfigParamLoadService.httpConnectTimeOut);
			// 设置读数据超时时间
			HttpConnectionParams.setSoTimeout(httpPost.getParams(),
					ConfigParamLoadService.httpReadtimeOut);
			response = httpclient.execute(httpPost);
			int statusCode = response.getStatusLine().getStatusCode();
			if (statusCode != HttpStatus.SC_OK) {
				logger.error("HttpStatus ERROR" + "Method failed: "
						+ response.getStatusLine());
				return "";
			} else {
				entity = response.getEntity();
				if (null != entity) {
					byte[] bytes = EntityUtils.toByteArray(entity);
					result = new String(bytes, "UTF-8");
				} else {
					logger.error("httpPost URL [" + url
							+ "],httpEntity is null.");
				}
				return result;
			}
		} catch (Exception e) {
			logger.error("httpPost URL [" + url + "] error, ", e);
			return "";
		} finally {
			if (null != httpclient) {
				httpclient.getConnectionManager().shutdown();
			}
			logger.info("RESULT:  [" + result + "]");
			logger.info("httpPost URL [" + url + "] end ");
		}
	}
}

 

该工具方法接受2个参数:

url--服务端提供访问的url地址

param--需要带上的参数

返回结果为:服务端设置的返回字符串(当然也可以是形如json之类的格式结果)

 

用到的第三方jar有:

httpcore-4.2-beta1.jar

httpclient-4.2-beta1.jar

 

另外工具类中引入了一个自己编写的service类ConfigParamLoadService

在这里只是传入了两个常量时间值(毫秒单位的超时时间值)

// 设置连接超时时间
   HttpConnectionParams.setConnectionTimeout(httpclient.getParams(),
     ConfigParamLoadService.httpConnectTimeOut);
   // 设置读数据超时时间
   HttpConnectionParams.setSoTimeout(httpPost.getParams(),
     ConfigParamLoadService.httpReadtimeOut);

  

jar包都可以到apache的官网下载

分享到:
评论

相关推荐

    HttpClient接口调用工具类(附带demo)

    总之,这个HttpClient工具类提供了一个简洁易用的接口,帮助开发者快速、方便地进行HTTP请求,无论是在进行API调用还是数据交互,都能大大简化工作流程。通过这个工具类,你无需深入了解HttpClient的底层实现,只需...

    HttpClientHelper 工具类

    HttpClientHelper 是一个C#编写的工具类,主要目的是简化HTTP客户端操作,提供同步和异步的请求方法,返回数据格式多样,包括字符串、泛型类型和XML。在爬虫开发中,这样的工具类非常实用,因为爬虫经常需要与各种...

    httpclient4.3工具类

    在实际使用`httpclientUtils`时,开发者可以通过调用工具类提供的方法,如`sendGetRequest(String url)`、`sendPostRequest(String url, Map, String&gt; params)`等,轻松地发起HTTP请求并获取响应。这些方法通常会...

    httpClient远程调用工具类

    httpClient远程调用工具类...

    httpClient调用wcf

    7. **依赖库**:压缩包中包含的其他JAR文件(如`commons-collections.jar`、`commons-lang.jar`等)是Apache Commons项目的一部分,它们提供了各种通用的工具类和集合操作,对HttpClient的使用提供了辅助支持。...

    HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件

    首先,HttpClientUtil工具类通常会封装HttpClient的基本操作,以便于开发者在应用中便捷地调用。GET和POST请求是HTTP协议中最常见的两种请求方法。GET请求用于获取服务器上的资源,而POST请求则常用于向服务器提交...

    HttpClient接口调用工具类 (附带调用demo)

    HttpClient接口调用工具类 (Post请求 get请求 put请求 delete请求 (附带调用demo) 下载就可以用 ) 可设置httpclient的连接池大小,连接池最大并发连接数,单路由最大并发数设

    HttpClientUtil工具类,调用第三方接口

    该工具类是java 调用第三方接口时需要使用到的。HttpClientUtil 包含get和post方法。

    webservice调用实例,通过HttpClient调用

    总之,通过HttpClient调用Web服务是一个涉及网络通信和HTTP协议理解的过程。在实际开发中,了解HttpClient的使用方法和最佳实践,可以帮助我们构建稳定、高效的Web服务客户端。结合Maven构建工具,可以轻松管理项目...

    HttpClient工具类

    这个工具类通常是开发者为了方便地调用HttpClient库而封装的一系列静态方法。HttpClient支持各种HTTP方法,如GET、POST、PUT、DELETE等,还能处理复杂的HTTP特性,如Cookie管理、重定向处理、HTTP连接池等。 在...

    httpclient4.3 封装工具类

    这个封裝工具类是对HttpClient 4.3进行的二次开发,旨在简化HTTP请求的处理,解决一些常见的问题,如代理设置、多线程并发请求、SSL安全连接以及GET和POST请求的通用实现。 1. **代理问题**:在进行网络请求时,...

    HttpClientUtil工具类 里面包含GET POST 及返回值处理

    这个工具类的主要优点在于它可以帮助开发者快速地构建网络请求,无需深入了解HttpClient库的所有细节。下面将详细解释HttpClientUtil的主要功能和使用方法。 1. **HttpClient介绍**: Apache HttpClient是一个Java...

    WebApi系列-通过HttpClient来调用WebApi接口.doc

    ### WebApi系列-通过HttpClient来调用WebApi接口 #### 一、概述 在现代Web开发中,Web API已经成为一种非常流行的模式,用于提供服务端与客户端之间的数据交互。随着.NET Framework以及.NET Core的发展,微软提供...

    httpclient4.3 封装工具类.zip

    综上所述,这个“httpclient4.3 封装工具类.zip”应该包含了一些实用的类,将HttpClient的基本操作进行了封装,方便开发者在处理HTTP请求时直接调用,提高开发效率和代码可维护性。使用这样的工具类,开发者可以更...

    webservice接口调用工具类依赖jar包

    WebService接口调用工具类是Java开发中常见的一种技术,用于与远程服务进行通信,尤其在集成不同系统或服务时非常关键。在这个场景中,"webservice接口调用工具类依赖jar包"指的是为了实现对WebService接口的调用,...

    如何在WPF应用程序中通过HttpClient调用Web API

    本教程将深入探讨如何利用HttpClient类在WPF应用中异步调用Web API,确保不阻塞主线程,提供流畅的用户体验。 HttpClient是一个强大的工具,用于发送HTTP请求并接收响应。在WPF应用中,我们可以使用异步编程技术,...

    JAVA利用HttpClient进行HTTPS接口调用

    接下来,`HttpClientUtil.java`文件可能是实现HttpClient工具类,提供一个静态方法来创建和初始化HttpClient实例。这个方法可能包含以下步骤: 1. 创建一个CloseableHttpClient实例,通常使用HttpClientBuilder构建...

    httpClient工具类

    HttpClient工具类在Java编程中是用于执行HTTP请求的常用库,尤其在进行RESTful API调用时非常实用。HttpClient提供了一种更为灵活和强大的方式来处理网络通信,相比Java内置的HttpURLConnection,它提供了更丰富的...

    淘淘商城07-工具类

    这些工具类通常提供了静态方法,方便开发者快速调用,避免重复编写相同功能的代码。 总的来说,"淘淘商城07-工具类"是一个集合了多种常见功能的Java工具包,旨在为电商项目的开发提供便利。通过合理利用这些工具类...

Global site tag (gtag.js) - Google Analytics