package com.taxi591.bankapi.utils;
|
|
import org.apache.http.Header;
|
import org.apache.http.HttpEntity;
|
import org.apache.http.HttpResponse;
|
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.HttpGet;
|
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.entity.StringEntity;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.HttpClientBuilder;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.message.BasicNameValuePair;
|
import org.apache.http.util.EntityUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
import java.util.*;
|
import java.util.Map.Entry;
|
|
/**
|
*httpClient操作远程url工具类
|
*/
|
public class HttpClientUtils {
|
private static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);
|
/**
|
* 发送str格式的post请求
|
* @param url
|
* @param jsonStr
|
* @return
|
*/
|
public static String doPostStr(String url, String str) {
|
// 建立HttpPost对象
|
HttpPost httppost = new HttpPost(url);
|
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
|
CloseableHttpClient client = httpClientBuilder.build();
|
// int statusCode = 0;
|
String responseBody = null;
|
try {
|
// 设置发送内容、编码等
|
StringEntity stringEntity = new StringEntity(str, "utf-8");
|
stringEntity.setContentType("text/plain");
|
httppost.setEntity(stringEntity);
|
// 发送Post,并返回一个HttpResponse对象
|
HttpResponse response = client.execute(httppost);
|
// // 获取返回码
|
// statusCode = response.getStatusLine().getStatusCode();
|
// 获取返回报文
|
responseBody = EntityUtils.toString(response.getEntity());
|
return responseBody;
|
}catch (Exception e) {
|
e.printStackTrace();
|
return null;
|
}
|
}
|
|
/**
|
* 下载文件
|
* @param url
|
* @param jsonStr
|
* @param 前台的返回流
|
* @return
|
*/
|
public static void doPostFile(String url, String str,HttpServletResponse httpResponse) {
|
ServletOutputStream out = null;
|
// 建立HttpPost对象
|
HttpPost httppost = new HttpPost(url);
|
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
|
CloseableHttpClient client = httpClientBuilder.build();
|
try {
|
// 设置发送内容、编码等
|
StringEntity stringEntity = new StringEntity(str, "utf-8");
|
stringEntity.setContentType("text/plain");
|
httppost.setEntity(stringEntity);
|
// 发送Post,并返回一个HttpResponse对象
|
HttpResponse response = client.execute(httppost);
|
// 获取返回报文
|
String responseStr = EntityUtils.toString(response.getEntity());
|
|
//如果系统返回未加密异常则会返回"{"+json+"}"
|
if (responseStr.startsWith("{")){
|
//设置响应头信息为页面形式
|
httpResponse.setCharacterEncoding("UTF-8");
|
httpResponse.setContentType("text/html;charset=utf-8");
|
httpResponse.sendRedirect("downloadTraceFail.jsp");
|
|
//如果返回内容为异常信息则返回内容为"签名||base64加密"形式
|
}else if (responseStr.contains("||")) {
|
//截取签名信息
|
String headSub = responseStr.substring(0, responseStr.indexOf("||"));
|
logger.warn("获取签名的前半部分:"+headSub);
|
//截取加密的json信息,进行解密
|
String tailSub = responseStr.substring(responseStr.indexOf("||")+2);
|
logger.warn("获取签名的后半部分:"+tailSub);
|
//将获取到的json报文进行解析,获取报文体信息
|
responseStr = Base64Util.decodeData(tailSub);
|
logger.warn("获取签名解密后:"+responseStr);
|
|
//设置响应头信息为页面形式
|
httpResponse.setCharacterEncoding("UTF-8");
|
httpResponse.setContentType("text/html;charset=utf-8");
|
httpResponse.sendRedirect("downloadTraceFail.jsp");
|
|
//返回内容为正常内容,将response消息头读取直接写入httpResponse中
|
}else{
|
Header[] encode = response.getAllHeaders();
|
for (Header header : encode) {
|
httpResponse.setHeader(header.getName(), header.getValue());
|
}
|
}
|
//将获取到的信息封装到httpEntity中,反映到页面中去
|
logger.warn("最终获取到的信息:"+responseStr);
|
HttpEntity entity = new StringEntity(responseStr,"UTF-8");
|
//通过输出流将结果反映到页面上
|
out = httpResponse.getOutputStream();
|
entity.writeTo(out);
|
out.flush();
|
}catch (Exception e) {
|
e.printStackTrace();
|
}finally{
|
if(out != null){
|
try {
|
out.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
|
/**
|
* get 请求方法
|
* @param url
|
* @return
|
*/
|
public static String doGet(String url) {
|
CloseableHttpClient httpClient = null;
|
CloseableHttpResponse response = null;
|
String result = "";
|
|
try {
|
//通过址默认配置创建一个httpClient实例
|
httpClient = HttpClients.createDefault();
|
//创建httpGet远程连接实例
|
HttpGet httpGet = new HttpGet(url);
|
//设置配置请求参数
|
RequestConfig requestConfig = RequestConfig.custom()
|
.setConnectTimeout(35000)//连接主机服务超时时间
|
.setConnectionRequestTimeout(35000)//请求超时时间
|
.setSocketTimeout(60000)//数据读取超时时间
|
.build();
|
//为httpGet实例设置配置
|
httpGet.setConfig(requestConfig);
|
//执行get请求得到返回对象
|
response = httpClient.execute(httpGet);
|
//通过返回对象获取返回数据
|
HttpEntity entity = response.getEntity();
|
//通过EntityUtils中的toString方法将结果转换为字符串
|
result = EntityUtils.toString(entity);
|
|
} catch (ClientProtocolException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
//关闭资源
|
if(null != response) {
|
try {
|
response.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
if(null != httpClient) {
|
try {
|
httpClient.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
return result;
|
}
|
|
/**
|
* post请求
|
* @param url
|
* @param paramMap
|
* @return
|
*/
|
public static String doPost(String url, Map<String,Object> paramMap) {
|
CloseableHttpClient httpClient = null;
|
CloseableHttpResponse response = null;
|
String result = "";
|
|
try {
|
//创建httpClient实例
|
httpClient = HttpClients.createDefault();
|
//创建httpPost远程连接实例
|
HttpPost httpPost = new HttpPost(url);
|
//配置请求参数实例
|
RequestConfig requestConfig = RequestConfig.custom()
|
.setConnectTimeout(35000)//设置连接主机服务超时时间
|
.setConnectionRequestTimeout(35000)//设置连接请求超时时间
|
.setSocketTimeout(60000)//设置读取数据连接超时时间
|
.build();
|
//为httpPost实例设置配置
|
httpPost.setConfig(requestConfig);
|
|
//封装post请求参数
|
if(null != paramMap && paramMap.size() > 0) {
|
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
|
//通过map集成entrySet方法获取entity
|
Set<Entry<String, Object>> entrySet = paramMap.entrySet();
|
//循环遍历,获取迭代器
|
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
|
while (iterator.hasNext()) {
|
Entry<String, Object> mapEntry = iterator.next();
|
nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
|
}
|
|
//为httpPost设置封装好的请求参数
|
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
|
}
|
|
//执行post请求得到返回对象
|
response = httpClient.execute(httpPost);
|
//通过返回对象获取数据
|
HttpEntity entity = response.getEntity();
|
//将返回的数据转换为字符串
|
result = EntityUtils.toString(entity);
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
//关闭资源
|
if(null != response) {
|
try {
|
response.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
if(null != httpClient) {
|
try {
|
httpClient.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
return result;
|
}
|
|
|
/**
|
*
|
* @param request
|
* @return
|
* @throws IOException
|
*/
|
public static String getRequestBody(HttpServletRequest request)
|
throws IOException {
|
/** 读取httpbody内容 */
|
StringBuilder httpBody = new StringBuilder();
|
BufferedReader br = null;
|
try {
|
br = new BufferedReader(new InputStreamReader(
|
request.getInputStream()));
|
String line = null;
|
while ((line = br.readLine()) != null) {
|
httpBody.append(line);
|
}
|
} catch (IOException ex) {
|
throw ex;
|
} finally {
|
if (br != null) {
|
try {
|
br.close();
|
} catch (IOException ex) {
|
ex.printStackTrace();
|
}
|
}
|
}
|
return httpBody.toString();
|
}
|
|
|
|
}
|