package com.jtjdxh.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import net.sf.json.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.Validate;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
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.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* <strong>Title : HttpClientUtil </strong>. <br>
* <strong>Description : HttpClient工具类.</strong> <br>
* <strong>Create on : 2016-1-21 上午10:51:59 </strong>. <br>
* <p>
* <strong>Copyright (C) Mocha Software Co.,Ltd.</strong> <br>
* </p>
*
* @author xiaoww xiaoww@mochasoft.com.cn <br>
* @version <strong>北京联通MBS升级2015---</strong> <br>
* <br>
* <strong>修改历史: .</strong> <br>
* 修改人 修改日期 修改描述<br>
* -------------------------------------------<br>
* <br>
* <br>
*/
public class HttpClientUtil {
/**
* <code>log</code>-日志使用log4j2
*/
private static Logger logger = LogManager.getLogger(HttpClientUtil.class);
/**
* 执行httpClient postMethod
* @param url 请求的路径
* @param param 请求的参数(map集合)
* @param contentType json/form/formdata
* @return
*/
public static String executePostMethod(String url, Map<String, Object> param, String contentType) {
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
String res = ""; // 请求返回默认的支持json串
try {
HttpPost httpPost = new HttpPost(url);
//设置请求和传输超时时间
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(5000).build();
httpPost.setConfig(requestConfig);
// BTW 4.3版本不设置超时的话,一旦服务器没有响应,等待时间N久(>24小时)。
HttpEntity entity = convertParam(param, contentType);
if(entity!=null){
if("formdata".equals(contentType)){
httpPost.setHeader("enctype", "multipart/form-data");
}
httpPost.setEntity(entity);
HttpResponse httpResponse = closeableHttpClient.execute(httpPost);
// 获取返回的状态码
int status = httpResponse.getStatusLine().getStatusCode();
logger.debug("Post请求URL="+url+",请求的参数="+param.toString()+",请求的格式"+contentType+",状态="+status);
if(status == HttpStatus.SC_OK){
HttpEntity entity2 = httpResponse.getEntity();
InputStream ins = entity2.getContent();
res = IOUtils.toString(ins);
ins.close();
}else{
logger.error("Post请求URL="+url+",请求的参数="+param.toString()+",请求的格式"+contentType+",错误Code:"+status);
}
logger.debug("执行Post方法请求返回的结果 = " + res);
}else{
logger.error("convertParam转换参数异常,转换参数结果为entity="+entity);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
closeableHttpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return res;
}
/**
* 转换参数
* @param param
* @param contentType
* @return
*/
private static HttpEntity convertParam(Map<String, Object> param, String contentType) throws IOException {
if ("form".equals(contentType)) {// 模拟普通的form表单提交
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
Set<String> keyset = param.keySet();
for (String key : keyset) {
Object paramObj = Validate.notNull(param.get(key));
// 追加参数
addFormParams(key, paramObj, formParams);
}
HttpEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");
return entity;
} else if ("json".equals(contentType)) { // json串用
JSONObject json = JSONObject.fromObject(param);
logger.debug("请求的json参数=" + json.toString());
StringEntity entity = new StringEntity(json.toString(), "UTF-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
return entity;
}else if("formdata".equals(contentType)){ // 文件上传用
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
Set<String> keyset = param.keySet();
for (String key : keyset) {
Object paramObj = Validate.notNull(param.get(key));
builder.addTextBody(key, paramObj.toString());
}
HttpEntity entity = builder.build();
return entity;
}
return null;
}
/**
* 设置NameValuePair参数(支持keyValue为List)
* @param key
* @param keyValue
* @param builder
*/
private static void addFormParams(String key,Object keyValue,List<NameValuePair> formParams){
if(keyValue instanceof ArrayList){ // 添加参数为list的参数
@SuppressWarnings("unchecked")
List<Map<String,Object>> paramList = (List<Map<String,Object>>)keyValue;
for(int i=0;i<paramList.size();i++){
Map<String,Object> param = paramList.get(i);
Set<String> paramKeySet = param.keySet();
for(String paramKey : paramKeySet){
String name = key+"["+i+"]."+paramKey;
String value = param.get(paramKey).toString();
logger.debug("form参数中map为list的参数name="+name+",value="+value);
formParams.add(new BasicNameValuePair(name, value));
}
}
}else{// 添加普通类型的参数
formParams.add(new BasicNameValuePair(key, keyValue.toString()));
}
}
/**
*
* 执行httpClient getMethod
* @param url 请求的url参数
* @return
*/
public static String executeGetMethod(String url) {
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
HttpGet httpGet = new HttpGet(url);
// 设置请求和传输超时时间
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(5000).build();
httpGet.setConfig(requestConfig);
// BTW 4.3版本不设置超时的话,一旦服务器没有响应,等待时间N久(>24小时)。
String res = "";
try {
CloseableHttpResponse httpResponse = closeableHttpClient.execute(httpGet);
// 获取response状态码
int status = httpResponse.getStatusLine().getStatusCode();
logger.debug("GET请求URL="+url+",状态="+status);
if(HttpStatus.SC_OK == status){
httpclient4.5 绕过ssl认证文件访问
3星 · 超过75%的资源 需积分: 50 54 浏览量
2016-03-01
16:31:43
上传
评论 1
收藏 3.94MB ZIP 举报
BadSkull
- 粉丝: 1
- 资源: 13
最新资源
- 基于CarNet实现裂缝检测python源码+文档说明+数据+图片(课程设计)
- 课程设计-基于耐火材料裂缝剥落检测python源码+课件
- 基于OpenCV的视频道路车道检测python源码+文档说明+实验演示+图片+使用方法(高分毕业设计)
- 基于OpenCV的案例:图像边缘、角点和轮廓检测,图像分割,图像增强;图片拼接;运动目标检测,颜色直方图比较,三帧帧差法,抠图
- SmartPlug-html大一笔记
- SmartPlug-proteusdemo
- Preliminary Findings on Handmade Rattan Baby Crib andBassinet Designs Regarding.zip
- aveebfq_v1.2.83_downyi.com.apk
- 基于有机发光二极管(OLED)的建模优化算法的matlab仿真源码+数据+文档说明+项目说明(高分课程设计)
- hash01-test.c 本人哈希表(一)的示例代码,仅供参考!
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈