httpclient4.3 工具类
httpclient4.3 java工具类。
。。
。因项目须要开发了一个工具类。正经常常使用的httpclient 请求操作应该都够用了
工具类下载地址:http://download.csdn.net/detail/ruishenh/7421641
package com.ruishenh.utils; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
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.config.RequestConfig;
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.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils; public class HttpClientUtils {
/**
* 连接超时时间
*/
public static final int CONNECTION_TIMEOUT_MS = 360000; /**
* 读取数据超时时间
*/
public static final int SO_TIMEOUT_MS = 360000; public static final String CONTENT_TYPE_JSON_CHARSET = "application/json;charset=gbk"; public static final String CONTENT_TYPE_XML_CHARSET = "application/xml;charset=gbk"; /**
* httpclient读取内容时使用的字符集
*/
public static final String CONTENT_CHARSET = "GBK"; public static final Charset UTF_8 = Charset.forName("UTF-8"); public static final Charset GBK = Charset.forName(CONTENT_CHARSET); /**
* 简单get调用
*
* @param url
* @param params
* @return
* @throws ClientProtocolException
* @throws IOException
* @throws URISyntaxException
*/
public static String simpleGetInvoke(String url, Map<String, String> params)
throws ClientProtocolException, IOException, URISyntaxException {
return simpleGetInvoke(url, params,CONTENT_CHARSET);
}
/**
* 简单get调用
*
* @param url
* @param params
* @return
* @throws ClientProtocolException
* @throws IOException
* @throws URISyntaxException
*/
public static String simpleGetInvoke(String url, Map<String, String> params,String charset)
throws ClientProtocolException, IOException, URISyntaxException { HttpClient client = buildHttpClient(false); HttpGet get = buildHttpGet(url, params); HttpResponse response = client.execute(get); assertStatus(response); HttpEntity entity = response.getEntity();
if (entity != null) {
String returnStr = EntityUtils.toString(entity,charset);
return returnStr;
}
return null;
} /**
* 简单post调用
*
* @param url
* @param params
* @return
* @throws URISyntaxException
* @throws ClientProtocolException
* @throws IOException
*/
public static String simplePostInvoke(String url, Map<String, String> params)
throws URISyntaxException, ClientProtocolException, IOException {
return simplePostInvoke(url, params,CONTENT_CHARSET);
}
/**
* 简单post调用
*
* @param url
* @param params
* @return
* @throws URISyntaxException
* @throws ClientProtocolException
* @throws IOException
*/
public static String simplePostInvoke(String url, Map<String, String> params,String charset)
throws URISyntaxException, ClientProtocolException, IOException { HttpClient client = buildHttpClient(false); HttpPost postMethod = buildHttpPost(url, params); HttpResponse response = client.execute(postMethod); assertStatus(response); HttpEntity entity = response.getEntity(); if (entity != null) {
String returnStr = EntityUtils.toString(entity, charset);
return returnStr;
} return null;
} /**
* 创建HttpClient
*
* @param isMultiThread
* @return
*/
public static HttpClient buildHttpClient(boolean isMultiThread) { CloseableHttpClient client; if (isMultiThread)
client = HttpClientBuilder
.create()
.setConnectionManager(
new PoolingHttpClientConnectionManager()).build();
else
client = HttpClientBuilder.create().build();
// 设置代理server地址和端口
// client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
return client;
} /**
* 构建httpPost对象
*
* @param url
* @param headers
* @return
* @throws UnsupportedEncodingException
* @throws URISyntaxException
*/
public static HttpPost buildHttpPost(String url, Map<String, String> params)
throws UnsupportedEncodingException, URISyntaxException {
Assert.notNull(url, "构建HttpPost时,url不能为null");
HttpPost post = new HttpPost(url);
setCommonHttpMethod(post);
HttpEntity he = null;
if (params != null) {
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
formparams.add(new BasicNameValuePair(key, params.get(key)));
}
he = new UrlEncodedFormEntity(formparams, GBK);
post.setEntity(he);
}
// 在RequestContent.process中会自己主动写入消息体的长度,自己不用写入。写入反而检測报错
// setContentLength(post, he);
return post; } /**
* 构建httpGet对象
*
* @param url
* @param headers
* @return
* @throws URISyntaxException
*/
public static HttpGet buildHttpGet(String url, Map<String, String> params)
throws URISyntaxException {
Assert.notNull(url, "构建HttpGet时,url不能为null");
HttpGet get = new HttpGet(buildGetUrl(url, params));
return get;
} /**
* build getUrl str
*
* @param url
* @param params
* @return
*/
private static String buildGetUrl(String url, Map<String, String> params) {
StringBuffer uriStr = new StringBuffer(url);
if (params != null) {
List<NameValuePair> ps = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
ps.add(new BasicNameValuePair(key, params.get(key)));
}
uriStr.append("?");
uriStr.append(URLEncodedUtils.format(ps, UTF_8));
}
return uriStr.toString();
} /**
* 设置HttpMethod通用配置
*
* @param httpMethod
*/
public static void setCommonHttpMethod(HttpRequestBase httpMethod) {
httpMethod.setHeader(HTTP.CONTENT_ENCODING, CONTENT_CHARSET);// setting
// contextCoding
// httpMethod.setHeader(HTTP.CHARSET_PARAM, CONTENT_CHARSET);
// httpMethod.setHeader(HTTP.CONTENT_TYPE, CONTENT_TYPE_JSON_CHARSET);
// httpMethod.setHeader(HTTP.CONTENT_TYPE, CONTENT_TYPE_XML_CHARSET);
} /**
* 设置成消息体的长度 setting MessageBody length
*
* @param httpMethod
* @param he
*/
public static void setContentLength(HttpRequestBase httpMethod,
HttpEntity he) {
if (he == null) {
return;
}
httpMethod.setHeader(HTTP.CONTENT_LEN, String.valueOf(he.getContentLength()));
} /**
* 构建公用RequestConfig
*
* @return
*/
public static RequestConfig buildRequestConfig() {
// 设置请求和传输超时时间
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(SO_TIMEOUT_MS)
.setConnectTimeout(CONNECTION_TIMEOUT_MS).build();
return requestConfig;
} /**
* 强验证必须是200状态否则报异常
* @param res
* @throws HttpException
*/
static void assertStatus(HttpResponse res) throws IOException{
Assert.notNull(res, "http响应对象为null");
Assert.notNull(res.getStatusLine(), "http响应对象的状态为null");
switch (res.getStatusLine().getStatusCode()) {
case HttpStatus.SC_OK:
// case HttpStatus.SC_CREATED:
// case HttpStatus.SC_ACCEPTED:
// case HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION:
// case HttpStatus.SC_NO_CONTENT:
// case HttpStatus.SC_RESET_CONTENT:
// case HttpStatus.SC_PARTIAL_CONTENT:
// case HttpStatus.SC_MULTI_STATUS:
break;
default:
throw new IOException("server响应状态异常,失败.");
}
}
private HttpClientUtils() {
}
public static void main(String[] args) throws ClientProtocolException, IOException, URISyntaxException {
System.out.println(simpleGetInvoke("http://www.baidu.com", new HashMap<String, String>()));
}
}
httpclient4.3 工具类的更多相关文章
- 基于HttpClient4.5.1实现Http访问工具类
本工具类基于httpclient4.5.1实现 <dependency> <groupId>org.apache.httpcomponents</groupId> ...
- HttpClient4.5 SSL访问工具类
要从网上找一个HttpClient SSL访问工具类太难了,原因是HttpClient版本太多了,稍有差别就不能用,最后笔者干脆自己封装了一个访问HTTPS并绕过证书工具类. 主要是基于新版本Http ...
- 基于HttpClient4.5.2实现的HttpClient工具类
1.maven依赖: <dependency> <groupId>org.apache.commons</groupId> <artifactId>co ...
- java http工具类和HttpUrlConnection上传文件分析
利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...
- 验证工具类 - ValidateUtils.java
验证工具类,提供验证email格式.是否ipv4.是否ipv6.是否中文.是否数字.正则表达式验证的方法. 源码如下:(点击下载 - ValidateUtils.java .commons-lang- ...
- Jsoup请求http或https返回json字符串工具类
Jsoup请求http或https返回json字符串工具类 所需要的jar包如下: jsoup-1.8.1.jar 依赖jar包如下: httpclient-4.5.4.jar; httpclient ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-5.HttpClient4.x工具获取使用
笔记 5.HttpClient4.x工具获取使用 简介:讲解httpClient4.x相关依赖,并封装基本方法. 1.加入依赖 <dependency> ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Android—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
随机推荐
- 【HDOJ】3828 A + B problem
显然需要贪心,重叠越长越好,这样最终的串长尽可能短.需要注意的是,不要考虑中间结果,显然是个状态dp.先做预处理去重,然后求任意一对串的公共长度. /* 3828 */ #include <io ...
- 1126. Magnetic Storms(单调队列)
1126 最简单的单调队列应用吧 单调队列是指在一个队列中各个元素单调 递增(或者递减),并且各个元素的下标单调 递增. 单调队列的大体操作 进队时,将进队的元素为e,从队尾往前扫描,直到找到一个不大 ...
- [原]Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)
NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路..导航时,只需要给导 ...
- BZOJ2870: 最长道路tree
题解: 子树分治的做法可以戳这里:http://blog.csdn.net/iamzky/article/details/41120733 可是码量... 这里介绍另一种好写又快的方法. 我们还是一颗 ...
- JQuery安全分析
JQuery安全分析: JQuery的风险均来源于对输入的数据没有进行有效性检验.客户端的Javascript需要检验:来源于服务器的数据.来源于当前页面的用户输入,服务器端需要检验来源于用户端的数据 ...
- Session简介
摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java ...
- LeetCode Pascal's Triangle II (杨辉三角)
题意:给出杨辉三角的层数k,返回最后一层.k=0时就是只有一个数字1. 思路:滚动数组计算前一半出来,返回时再复制另一半.简单但是每一句都挺长的. 0ms的版本: class Solution { p ...
- mysqldump使用
mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...
- Spring基础知识及bean的配置
IOC与DI: IOC(inversion of control):其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源.作为回应,容器适时的返回资源.而应用了IOC之后,则是 ...
- ARM Linux系统的时钟机制
1. Linux下有两类时钟: 1.1 实时钟RTC 它由板上电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行 ...