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 工具类的更多相关文章

  1. 基于HttpClient4.5.1实现Http访问工具类

    本工具类基于httpclient4.5.1实现 <dependency> <groupId>org.apache.httpcomponents</groupId> ...

  2. HttpClient4.5 SSL访问工具类

    要从网上找一个HttpClient SSL访问工具类太难了,原因是HttpClient版本太多了,稍有差别就不能用,最后笔者干脆自己封装了一个访问HTTPS并绕过证书工具类. 主要是基于新版本Http ...

  3. 基于HttpClient4.5.2实现的HttpClient工具类

    1.maven依赖: <dependency> <groupId>org.apache.commons</groupId> <artifactId>co ...

  4. java http工具类和HttpUrlConnection上传文件分析

    利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...

  5. 验证工具类 - ValidateUtils.java

    验证工具类,提供验证email格式.是否ipv4.是否ipv6.是否中文.是否数字.正则表达式验证的方法. 源码如下:(点击下载 - ValidateUtils.java .commons-lang- ...

  6. Jsoup请求http或https返回json字符串工具类

    Jsoup请求http或https返回json字符串工具类 所需要的jar包如下: jsoup-1.8.1.jar 依赖jar包如下: httpclient-4.5.4.jar; httpclient ...

  7. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-5.HttpClient4.x工具获取使用

    笔记 5.HttpClient4.x工具获取使用     简介:讲解httpClient4.x相关依赖,并封装基本方法. 1.加入依赖         <dependency>       ...

  8. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  9. Android—关于自定义对话框的工具类

    开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...

随机推荐

  1. LINUX进程优先级实现

    首先linux进程优先级的范围是-20到19 将当前目录下的documents目录打包,但不希望tar占用太多CPU: nice -19 tar zcf pack.tar.gz documents 这 ...

  2. Oracle命令(一):Oracle登录命令

    1.运行SQLPLUS工具 C:\Users\wd-pc>sqlplus 2.直接进入SQLPLUS命令提示符 C:\Users\wd-pc>sqlplus /nolog 3.以OS身份连 ...

  3. 为Windows 7添加“Internet打印”功能

    http://wangchunhai.blog.51cto.com/225186/1156589/

  4. 【HDOJ】1448 The Treasure

    这就是个简单的bfs.真没什么好说的,三维的状态就可以了.每次预处理一下monster的位置,然后再恢复. /* 1924 */ #include <iostream> #include ...

  5. Android开发之读写联系人

    读写联系人需要用到android的ContentProvider 同时需要读和写联系人的权限 需要使用到联系人数据库中的 * raw_contacts表: * contact_id:联系人id * d ...

  6. Compass被墙后如何安装安装

    今天安装 Compass 多时候发现竟然安装不了,且什么提示也没有,让人纳闷.安装代码如下: $ gem install compass 运行该段代码后发现没反应,也没有提示,后来网上查了才知道,竟然 ...

  7. poj2001 Shortest Prefixes (trie)

    读入建立一棵字母树,并且每到一个节点就增加这个节点的覆盖数. 然后再重新扫一遍,一旦碰到某个覆盖数为1就是这个单词的最短前缀了. 不知为何下面的程序一直有bug……不知是读入的问题? type nod ...

  8. python Image PNG getpixel R/G/B/A

    # python Image PNG getpixel R/G/B/A# # 说明: # 本文主要是记录python中如何使用Image模块进行基本的图像R.G.B.A值得获取. # 为后续的rasp ...

  9. Gen_server行为分析与实践

    1.简介 Gen_server实现了通用服务器client_server原理,几个不同的客户端去分享服务端管理的资源(如图),gen_server提供标准的接口函数和包含追踪功能以及错误报告来实现通用 ...

  10. Nitrous挂VPN