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工具类的想法.要做就 ...
随机推荐
- [转]java工程师成神之路
转载http://www.hollischuang.com/archives/489https://linux.cn/article-6739-1.html 一.基础篇 1.1 JVM 1.1.1. ...
- Java基础(56):Java---Assertion的试用(华为OJ里的Java题目的用例检测就是用的断言)
一.assertion的意义和用法 J2SE 1.4在语言上提供了一个新特性,就是assertion功能,它是该版本在Java语言方面最大的革新. 从理论上来说,通过 assertion方式可以证明程 ...
- .net 反编译工具
遇到一个需求,做一个专门访问自己网站的浏览器给用户使用,这个浏览器提供登录功能.此时是一个安装在客户端的exe程序,做登录验证要用到webservice,不能将验证逻辑写入exe中,否则客户端可以利用 ...
- linux第7天 I/O的五种模型, select
服务器端避免僵尸进程的方法: 1)通过忽略SIGCHLD信号,解决僵尸进程 signal(SIGCHLD, SIG_IGN) 2)通过wait方法,解决僵尸进程 signal(SIGCHLD, han ...
- Redis和Memcache对比及选择
没有必要过多的关注性能.由于Redis只使用单核,而Memcached可以使用多核, 所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高.而在100k以上的数据中,Mem ...
- sql字符转换函数大全
删除空格 有两个函数,TTRIM()和LTRIM(),可以用来从字符串中剪掉空格.函数LTRIM()去除应该字符串前面的所有空格:函数RTRIM()去除一个字符串尾部的所有空格.这些和vbscript ...
- 夺命雷公狗---node.js---1node的下载和安装
node目前有两个网站,一个是英文的,一个是中文的,,左边这个是长期有效版本,右边的是最新版本,在下面可以很清晰的看得到node的英文网站更新速度是比中文网站上的快的多 我们用来测试的版本是windo ...
- 夺命雷公狗---微信开发57----微网站之jquery_mobile之入门案例
这节课我们主要用到到jquery_mobile来实现一个点电影播放网站 jquery_mobile(简称JQM)其实就是基于jquery开发出来的一套移动端框架,适应移动用户端市场对浏览与体验从而进一 ...
- CCS3属性之text-overflow:ellipsis;的用法和注意之处
语法: text-overflow:clip | ellipsis 默认值:clip 适用于:所有元素 clip: 当对象内文本溢出时不显示省略标记(...),而是将溢出的部分裁切掉. ellipsi ...
- php 下载保存文件保存到本地的两种方法
第一种: 1 <? ?> 或 <?php //下载文件保存到本地//www.jbxue.comfunction downfile($fileurl){ob_start(); $fil ...