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—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
随机推荐
- FrameworkElement.Name与x:Name
在Xaml中定义某种类型的一个element就相当于构造了一个此类型的对象.如: <MyType /> 但是这个对象如何去访问?类似于CLR中在栈中存放对象在堆中的地址,然后将该栈的地址命 ...
- HTML5学习(五)----SVG
参考教程地址:http://www.w3school.com.cn/html5/html_5_svg.asp HTML5 支持内联 SVG. 什么是SVG? SVG 指可伸缩矢量图形 (Scalabl ...
- poj 3687 Labeling Balls(拓扑排序)
题目:http://poj.org/problem?id=3687题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号球最轻 ...
- gdb调试SAPI方式的php
一.修改php-fpm.conf文件 /usr/local/php/etc/php-fpm.conf pm.max_children = 1 #只产生一个进程,便于追踪 二.得到进行服务的进程号 [r ...
- bzoj2456
有趣的题目 空间1mb,所以开数组的算法就不要想了(我一开始没看到……) 仔细读题,然后发现这里他限定众数为出现超过n div 2次 也就是说,这个数可以对应每一个不相同的数消掉,最终还剩下这个数 也 ...
- eayui 验证扩展
$.extend($.fn.validatebox.defaults.rules, { idcard : {// 验证身份证 validator : function(value) { return ...
- 转:eclipse导入工程中文乱码问题
eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...
- javaScript动态给下拉列表框添加选项
方式一: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></titl ...
- <转>MySQL性能优化的最佳20+条经验
http://coolshell.cn/articles/1846.html 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心 ...
- 【原】Redis-LRU缓存
Redis高级篇 Redis-LRU缓存 将Redis作为缓存使用时,有时添加新数据时,旧数据是很难被清空的. LRU(Least Recently Used) 近期最少使用算法是常用算法之一. 最大 ...