httpclient4.3.6/httpcore-4.4自己封装的工具类
引入jar包
httpclient4.3.6/httpcore-4.4
package com.develop.util; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; /**
* 应用jar包 httpclient-4.3.6/httpcore-4.4
* @author Administrator
*
*/
public class HttpClientUtil { private static String defaultCharset = "UTF-8";//默认编码
private static int connectionRequestTimeout = 60000;
private static int connectTimeout = 60000;
private static int socketTimeout = 60000; /**
* httpclient post请求(不带编码,默认UTF-8)
* @param uri
* @param param 参数支持string map
* @return
*/
public static String doHttpPost(String uri,Object param){
return doHttpPost(uri, param, defaultCharset);
} /**
* httpclient post请求
* @param uri
* @param param 支持string map
* @param charset
* @return
*/
public static String doHttpPost(String uri,Object param,String charset){
if(uri==null||"".equals(uri)){
System.out.println("请求uri为空!");
return null;
}
int index = uri.indexOf("?");
if(index>-1){
uri = uri.substring(0, index);
} CloseableHttpClient httpClient = createHttpClient(uri);
HttpPost httpPost = new HttpPost(uri);
httpPost.setConfig(RequestConfig.custom()
.setConnectionRequestTimeout(connectionRequestTimeout)
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
.build());
httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded;charset="+charset);
//有些服务器做了限制,访问不到,需要伪装浏览器请求
httpPost.setHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
// httpPost.getParams().setParameter(HttpHeaders.USER_AGENT,
// "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");//如果放到header中不管用,就打开注释 //将参数封装到HttpEntity
HttpEntity requestEntity = null;
if(param!=null&&!"".equals(param)){
requestEntity = getRequestEntity(param,charset);
httpPost.setEntity(requestEntity);
} CloseableHttpResponse response = null;
HttpEntity responseEntity = null;
try {
response = httpClient.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
System.out.println("HttpClientUtil(doHttpPost)返回状态码statusCode:"+statusCode);
if(statusCode!=HttpStatus.SC_OK){
return null;
}
responseEntity = response.getEntity();
String result = EntityUtils.toString(responseEntity, charset);
System.out.println("HttpClientUtil(doHttpPost)返回info:"+result);
return result; } catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
EntityUtils.consume(responseEntity);
} catch (IOException e) {
e.printStackTrace();
}
HttpClientUtils.closeQuietly(response);
try {
EntityUtils.consume(requestEntity);
} catch (IOException e) {
e.printStackTrace();
}
HttpClientUtils.closeQuietly(httpClient);
} return null;
} /**
* 根据传入的参数类型获取对应的封装了参数的httpEntity
* @param param
* @return
*/
private static HttpEntity getRequestEntity(Object param,String charset){
if(param==null){
return null;
} if(param instanceof String){
String paramStr = (String)param;
int index = paramStr.indexOf("?");//问号位置
if(index>-1){
paramStr = paramStr.substring(index+1);
}
StringEntity stringEntity = new StringEntity(paramStr,charset);
stringEntity.setContentType("application/x-www-form-urlencoded;charset="+charset);
return stringEntity;
}else if(param instanceof Map){
Map paramMap = (Map)param;
int paramSize = paramMap.size();
if(paramSize==0){
return null;
}
List<NameValuePair> list = new ArrayList<NameValuePair>(paramSize); Iterator iterator = paramMap.keySet().iterator();
while(iterator.hasNext()){
Object key = iterator.next();
Object value = paramMap.get(key);
NameValuePair nameValuePair = new BasicNameValuePair(key.toString(), value.toString());
list.add(nameValuePair);
} UrlEncodedFormEntity urlEncodedFormEntity = null;
try {
urlEncodedFormEntity = new UrlEncodedFormEntity(list,charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} return urlEncodedFormEntity;
} return null; } /**
* httpclient get请求(不带编码,默认UTF-8)
* @param uri
* @param param
* @return
*/
public static String doHttpGet(String uri,String param){
return doHttpGet(uri,param ,defaultCharset);
} /**
* httpclient get请求
* @param uri
* @param param
* @param charset
* @return
*/
public static String doHttpGet(String uri,String param,String charset){
if(uri==null||"".equals(uri)){
System.out.println("请求uri为空!");
return null;
} int index = uri.indexOf("?");
if(index>-1){
uri = uri.substring(0, index);
} uri += encodeParam(param, charset); CloseableHttpClient httpClient = createHttpClient(uri);
HttpGet httpGet = new HttpGet(uri);
httpGet.setConfig(RequestConfig.custom()
.setConnectionRequestTimeout(connectionRequestTimeout)
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
.build());
httpGet.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded;charset="+charset);
//有些服务器做了限制,访问不到,需要伪装浏览器请求
httpGet.setHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
// httpGet.getParams().setParameter(HttpHeaders.USER_AGENT,
// "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");//如果放到header中不管用,就打开注释 CloseableHttpResponse response = null;
HttpEntity responseEntity = null;
try {
response = httpClient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
System.out.println("HttpClientUtil(doHttpGet)返回状态码statusCode:"+statusCode);
if(statusCode!=HttpStatus.SC_OK){
return null;
}
responseEntity = response.getEntity();
String result = EntityUtils.toString(responseEntity, charset);
System.out.println("HttpClientUtil(doHttpGet)返回info:"+result);
return result; } catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
EntityUtils.consume(responseEntity);
} catch (IOException e) {
e.printStackTrace();
}
HttpClientUtils.closeQuietly(response);
HttpClientUtils.closeQuietly(httpClient);
} return null;
} /**
* 将get请求的参数进行编码
* @param param
* @param charset
* @return
*/
private static String encodeParam(String param,String charset){
if(param==null){
return "";
}
int index = param.indexOf("?");//问号位置
if(index>-1){
param = param.substring(index+1);
}
if(param.length()==0){
return "";
}
String[] keyAndValues = param.split("&");
if(keyAndValues==null||keyAndValues.length==0){
return "";
} String encodedParam = ""; int count = 0;
for(String keyAndValue:keyAndValues){
count ++;
String[] arr = keyAndValue.split("=",2);
if(arr==null||arr.length==0){
System.out.println("参数("+keyAndValue+")异常!");
continue;
} String key = arr[0];
String value = arr[1]; if("null".equals(value)){//处理参数值为字符串的null,置空
value = "";
} if(value!=null&&!"".equals(value)){
try {
value = URLEncoder.encode(value, charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} encodedParam += (key +"="+ value); if(count<keyAndValues.length){
encodedParam += "&";
} } if(encodedParam.length()!=0){
encodedParam = "?"+ encodedParam;
} return encodedParam;
} /**
* 创建HttpClient
* @param uri
* @return
*/
private static CloseableHttpClient createHttpClient(String uri){ if(uri!=null&&uri.indexOf("https")>-1){
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
//信任所有
@Override
public boolean isTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
return true;
}
}).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
} return HttpClients.createDefault();
} }
httpclient4.3.6/httpcore-4.4自己封装的工具类的更多相关文章
- .NET3.5中JSON用法以及封装JsonUtils工具类
.NET3.5中JSON用法以及封装JsonUtils工具类 我们讲到JSON的简单使用,现在我们来研究如何进行封装微软提供的JSON基类,达到更加方便.简单.强大且重用性高的效果. 首先创建一个类 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JAVA中封装JSONUtils工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- Workbook导出excel封装的工具类
在实际中导出excel非常常见,于是自己封装了一个导出数据到excel的工具类,先附上代码,最后会写出实例和解释.支持03和07两个版本的 excel. HSSF导出的是xls的excel,XSSF导 ...
- 封装JDBC工具类
JDBC连接数据库基本的步骤是固定的,这样就可以考虑封装一个工具类来简化数据库操作. 封装时用到了Java中的properties配置文件,是以一种键值对的形式存在的,可以把连接数据库要动态的信息保存 ...
- writeValueAsString封装成工具类
封装成工具类 <span style="font-family:Microsoft YaHei;">public static String toJsonByObjec ...
- 转:轻松把玩HttpClient之封装HttpClient工具类(一)(现有网上分享中的最强大的工具类)
搜了一下网络上别人封装的HttpClient,大部分特别简单,有一些看起来比较高级,但是用起来都不怎么好用.调用关系不清楚,结构有点混乱.所以也就萌生了自己封装HttpClient工具类的想法.要做就 ...
随机推荐
- 初始化 Gradle 工程目录(转自: 隔叶黄莺 Unmi Blog)
最近重新在 Eclipse 中打开旧的 Maven 项目,总有些什么错误,备受折磨.期间试手了 Ant+Ivy, 现今试用了下 Gradle,感觉不错,它应该才是我真想要的,Maven 差不多该扔到一 ...
- ngrok外网登录本地Web服务器
首先在网上下载ngrok软件,然后cmd到其目录下,运行ngrok http 80即可打开服务器,然后自动生成外网连接,然后C:\inetpub\wwwroot下放置html网页,在公网即可打开
- Ruby On Rails 环境搭建MySQL数据库连接
1. 安装wamp1.7.4从而自动安装好Apache和MySQL,Apache的端口可能会被IIS服务占用,可以去控制面板里关掉 2. 修改root密码,为了能在phpMyAdmin里继续操作数 ...
- Extjs4.x完美treepanel checkbox无限级选中与取消
注:当node选中, childNodes逐级全部选中. parentNode当子node全部选中时逐级自动选中,nodes未全部选中, parentNode逐级自动取消选中 在javascript中 ...
- Android 测试Service的生命周期
package com.example.myapp4; import android.support.v7.app.ActionBarActivity; import android.content. ...
- paper 77:[转载]ENDNOTE使用方法,常用!
一.简介 EndNote是一款用于海量文献管理和批量参考文献管理的工具软件,自问世起就成为科研界的必备武器.在前EndNote时代,文献复习阶段从各大数据库中搜集到的文献往往千头万绪.或重复或遗漏, ...
- paper 71 :图像清晰化
图像清晰度是衡量图像品质优劣的标准之一,清晰的图像能给人以赏心悦目的视觉享受.长期以来,图像扫描设备和图像处理软件的开发生产厂商都很重视图像清晰度处理功能的开发,图像处理人员也在日常的实践中不断摸索出 ...
- paper 19 :机器学习算法(简介)
本来看了一天的分类器方面的代码,乱乱的,索性再把最基础的概念拿过来,现总结一下机器学习的算法吧! 1.机器学习算法简述 按照不同的分类标准,可以把机器学习的算法做不同的分类. 1.1 从机器学习问题角 ...
- ASP.NET MVC(二)
休息一下还是继续ASP.NET MVC 的基础知识. 这篇文件我想和大家一起熟悉下ASP.NET MVC项目的目录结构及dll. 1. ASP.NET MVC 项目的目录结构 App_Data: 存 ...
- Javascript与C#编码解码
(一) Javascript与C#编码解码的对应关系 http://www.jb51.net/article/44062.htm 这篇文章主要是对JS与C#编码解码进行了详细的介绍,需要的朋友可以过来 ...