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 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 nvps = new ArrayList(); //通过map集成entrySet方法获取entity Set> entrySet = paramMap.entrySet(); //循环遍历,获取迭代器 Iterator> iterator = entrySet.iterator(); while (iterator.hasNext()) { Entry 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(); } }