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工具类的想法.要做就 ...
随机推荐
- Lintcode: Search Range in Binary Search Tree
Given two values k1 and k2 (where k1 < k2) and a root pointer to a Binary Search Tree. Find all t ...
- vs2015社区版不支持installshield
开始学习vs了 下一步就是在这个平台上提升技术咯. 写了老师上课讲的算法 生成了个VB程序结果不能在别的电脑上运行 .幸好我自己测试了下.要是直接拿去学校不是很~ 然后我就想到当初接触易语言时候的搞静 ...
- 解决HierarchyViewer不能连接真机的问题
今天想通过HierarchyViewer分析一下Android应用的布局,但是发现无法连接上真机,错误如下: 1 2 3 4 5 [hierarchyviewer]Unable to get ...
- java 网络编程(四)----UDP进阶篇聊天小程序
设计要求:单线程模式,客户端只发送数据,数据的来源为键盘录入,服务器端只接收数据,当客户端发送886的时候,客户端和服务器端都退出. 1. 发送端: public class Send impleme ...
- x3270: PCOM的替代品
在Linux上登录Mainframe的利器,而且也是PCOM的免费版.原来没有仔细研究,今天花了一些时间学习,确实能满足基本的要求: x3270的Homepage 看一下Release Note, ...
- 一、Java基础--01
Java基础测试题分析 第一题是关于基本的算法知识,这个很有必要去掌握以下,在学校也经常听老师们说找工作比试面试会出一些这方面的知识,我拿到的第一题是关于排序的,虽然很简单,但是我还是要提醒一下基础不 ...
- 弹出层和ajax数据交互
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...
- div内的img下出现几像素的空白间距解决办法
现象描述: 解决方法: 1.设父元素的font-size:0; 2.设img为display:block; 3.设img为vertical-align:middle;
- Ajax错误 “SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3, 由于出现错误 00002ef3 而导致此项操作无法完成” 的归纳总结
最近在做Asp.net项目的时候,用Ajax访问服务器数据有时候老是莫名其妙的报错:SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3, 由于出现错误 00002ef3 而 ...
- 小结 javascript中的类型检测
先吐槽一下博客园的编辑器,太不好用了,一旦粘贴个表格进来就会卡死,每次都要用html编辑器写,不爽! 关于javascript的类型检测,早在实习的时候就应该总结,一直拖到现在,当时因为这个问题还出了 ...