| | |
| | | package com.panzhihua.common.utlis; |
| | | |
| | | import java.io.*; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| | | import java.net.URLConnection; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import com.panzhihua.common.constants.HttpConstant; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.http.Header; |
| | | import org.apache.http.HttpEntity; |
| | | import org.apache.http.HttpResponse; |
| | | import org.apache.http.client.HttpClient; |
| | | import org.apache.http.client.methods.HttpGet; |
| | | import org.apache.http.client.methods.HttpPost; |
| | | import org.apache.http.client.methods.HttpUriRequest; |
| | | import org.apache.http.entity.StringEntity; |
| | | import org.apache.http.impl.client.DefaultHttpClient; |
| | | import org.apache.http.impl.client.HttpClients; |
| | | import org.apache.http.message.BasicHeader; |
| | | import org.apache.http.util.EntityUtils; |
| | | import org.springframework.util.ObjectUtils; |
| | | |
| | | import java.io.BufferedReader; |
| | | import java.io.IOException; |
| | | import java.io.InputStreamReader; |
| | | import java.io.OutputStreamWriter; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| | | import java.net.URLConnection; |
| | | import com.panzhihua.common.constants.HttpConstant; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * @program: springcloud_k8s_panzhihuazhihuishequ |
| | |
| | | public class HttpClientUtil { |
| | | /** |
| | | * 通过post方式调用http接口 |
| | | * @param url url路径 |
| | | * @param jsonParam json格式的参数 |
| | | * @param reSend 重发次数 |
| | | * @param headerKey header键值 |
| | | * @param headerValue headervalue |
| | | * |
| | | * @param url |
| | | * url路径 |
| | | * @param jsonParam |
| | | * json格式的参数 |
| | | * @param reSend |
| | | * 重发次数 |
| | | * @param headerKey |
| | | * header键值 |
| | | * @param headerValue |
| | | * headervalue |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String sendPostByJson(String url, String jsonParam,int reSend,String headerKey,String headerValue) { |
| | | //声明返回结果 |
| | | public static String sendPostByJson(String url, String jsonParam, int reSend, String headerKey, |
| | | String headerValue) { |
| | | // 声明返回结果 |
| | | String result = ""; |
| | | //开始请求API接口时间 |
| | | long startTime=System.currentTimeMillis(); |
| | | //请求API接口的响应时间 |
| | | long endTime= 0L; |
| | | // 开始请求API接口时间 |
| | | long startTime = System.currentTimeMillis(); |
| | | // 请求API接口的响应时间 |
| | | long endTime = 0L; |
| | | HttpEntity httpEntity = null; |
| | | HttpResponse httpResponse = null; |
| | | HttpClient httpClient = null; |
| | |
| | | httpClient = HttpClientFactory.getInstance().getHttpClient(); |
| | | // 设置请求头和报文 |
| | | HttpPost httpPost = HttpClientFactory.getInstance().httpPost(url); |
| | | Header header=new BasicHeader("Accept-Encoding",null); |
| | | Header header = new BasicHeader("Accept-Encoding", null); |
| | | httpPost.setHeader(header); |
| | | if (!ObjectUtils.isEmpty(headerKey)) { |
| | | httpPost.setHeader(headerKey,headerValue); |
| | | httpPost.setHeader(headerKey, headerValue); |
| | | } |
| | | // 设置报文和通讯格式 |
| | | StringEntity stringEntity = new StringEntity(jsonParam, HttpConstant.UTF8_ENCODE); |
| | | stringEntity.setContentEncoding(HttpConstant.UTF8_ENCODE); |
| | | stringEntity.setContentType(HttpConstant.APPLICATION_JSON); |
| | | httpPost.setEntity(stringEntity); |
| | | log.info("请求{}接口的参数为{}",url,jsonParam); |
| | | //执行发送,获取相应结果 |
| | | // log.info("请求{}接口的参数为{}", url, jsonParam); |
| | | // 执行发送,获取相应结果 |
| | | httpResponse = httpClient.execute(httpPost); |
| | | httpEntity= httpResponse.getEntity(); |
| | | httpEntity = httpResponse.getEntity(); |
| | | result = EntityUtils.toString(httpEntity); |
| | | } catch (Exception e) { |
| | | log.error("请求{}接口出现异常",url,e); |
| | | log.error("请求{}接口出现异常", url, e); |
| | | if (reSend > 0) { |
| | | log.info("请求{}出现异常:{},进行重发。进行第{}次重发",url,e.getMessage(),(HttpConstant.REQ_TIMES-reSend +1)); |
| | | result = sendPostByJson(url, jsonParam, reSend - 1,headerKey,headerValue); |
| | | log.info("请求{}出现异常:{},进行重发。进行第{}次重发", url, e.getMessage(), (HttpConstant.REQ_TIMES - reSend + 1)); |
| | | result = sendPostByJson(url, jsonParam, reSend - 1, headerKey, headerValue); |
| | | if (result != null && !"".equals(result)) { |
| | | return result; |
| | | } |
| | | } |
| | | }finally { |
| | | } finally { |
| | | try { |
| | | EntityUtils.consume(httpEntity); |
| | | } catch (IOException e) { |
| | | log.error("http请求释放资源异常",e); |
| | | log.error("http请求释放资源异常", e); |
| | | } |
| | | } |
| | | //请求接口的响应时间 |
| | | endTime=System.currentTimeMillis(); |
| | | log.info("请求{}接口的响应报文内容为{},本次请求API接口的响应时间为:{}毫秒",url,result,(endTime-startTime)); |
| | | // 请求接口的响应时间 |
| | | endTime = System.currentTimeMillis(); |
| | | // log.info("请求{}接口的响应报文内容为{},本次请求API接口的响应时间为:{}毫秒", url, result, (endTime - startTime)); |
| | | return result; |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 使用http请求调用接口,参数类型为xml |
| | | * @param urlStr 请求地址 |
| | | * @param data 请求参数 |
| | | * @return 调用结果 |
| | | * |
| | | * @param urlStr |
| | | * 请求地址 |
| | | * @param data |
| | | * 请求参数 |
| | | * @return 调用结果 |
| | | */ |
| | | public static String httpsRequest(String urlStr,String data) { |
| | | public static String httpsRequest(String urlStr, String data) { |
| | | try { |
| | | URL url = new URL(urlStr); |
| | | URLConnection con = url.openConnection(); |
| | | con.setDoOutput(true); |
| | | // con.setRequestProperty("Pragma:", "no-cache"); |
| | | // con.setRequestProperty("Pragma:", "no-cache"); |
| | | con.setRequestProperty("Cache-Control", "no-cache"); |
| | | con.setRequestProperty("Content-Type", "text/xml"); |
| | | |
| | | OutputStreamWriter out = new OutputStreamWriter(con |
| | | .getOutputStream()); |
| | | OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); |
| | | log.info("urlStr=" + urlStr); |
| | | log.info("xmlInfo=" + data); |
| | | out.write(new String(data.getBytes("UTF-8"))); |
| | | out.flush(); |
| | | out.close(); |
| | | BufferedReader br = new BufferedReader(new InputStreamReader(con |
| | | .getInputStream())); |
| | | BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); |
| | | String line = ""; |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (line = br.readLine(); line != null; line = br.readLine()) { |
| | | sb.append(br.readLine()); |
| | | System.out.println(line); |
| | | sb.append(line); |
| | | } |
| | | return sb.toString(); |
| | | } catch (MalformedURLException e) { |
| | |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * http请求工具类,get请求 |
| | | * |
| | | * @param url |
| | | * @param params |
| | | * @param resonseCharSet |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String httpGet(String url, Map<String, Object> params, String... resonseCharSet) throws Exception { |
| | | DefaultHttpClient defaultHttpClient = null; |
| | | BufferedReader bufferedReader = null; |
| | | try { |
| | | defaultHttpClient = new DefaultHttpClient(); |
| | | if (params != null) { |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | Iterator<String> iterator = params.keySet().iterator(); |
| | | String key; |
| | | while (iterator.hasNext()) { |
| | | key = iterator.next(); |
| | | Object val = params.get(key); |
| | | if (val instanceof List) { |
| | | List v = (List)val; |
| | | for (Object o : v) { |
| | | stringBuilder.append(key).append("=").append(o.toString()).append("&"); |
| | | } |
| | | } else { |
| | | stringBuilder.append(key).append("=").append(val.toString()).append("&"); |
| | | } |
| | | } |
| | | stringBuilder.deleteCharAt(stringBuilder.length() - 1); |
| | | url = url + "?" + stringBuilder.toString(); |
| | | log.info("url:{}", url); |
| | | } |
| | | HttpGet httpGet = new HttpGet(url); |
| | | httpGet.setHeader("Content-Type", "application/json;charset=ut-8"); |
| | | HttpResponse httpResponse = defaultHttpClient.execute(httpGet); |
| | | if (httpResponse.getStatusLine().getStatusCode() != 200) { |
| | | String errorLog = "请求失败,errorCode:" + httpResponse.getStatusLine().getStatusCode(); |
| | | log.info(errorLog); |
| | | throw new Exception(url + errorLog); |
| | | } |
| | | // 读取返回信息 |
| | | String charSet = "utf-8"; |
| | | if (resonseCharSet != null && resonseCharSet.length > 0) |
| | | charSet = resonseCharSet[0]; |
| | | String output; |
| | | bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), charSet)); |
| | | |
| | | StringBuilder dataBuilder = new StringBuilder(); |
| | | while ((output = bufferedReader.readLine()) != null) { |
| | | dataBuilder.append(output); |
| | | } |
| | | return dataBuilder.toString(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | throw e; |
| | | } finally { |
| | | if (defaultHttpClient != null) |
| | | defaultHttpClient.getConnectionManager().shutdown(); |
| | | if (bufferedReader != null) |
| | | bufferedReader.close(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * http请求工具类,post请求 |
| | | * |
| | | * @param url |
| | | * url |
| | | * @param param |
| | | * 参数值 仅支持String |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String httpPost(String url, String param) throws Exception { |
| | | DefaultHttpClient defaultHttpClient = null; |
| | | BufferedReader bufferedReader = null; |
| | | try { |
| | | defaultHttpClient = new DefaultHttpClient(); |
| | | HttpPost httpPost = new HttpPost(url); |
| | | httpPost.setHeader("Content-Type", "application/json;charset=ut-8"); |
| | | if (StringUtils.isNotBlank(param)) { |
| | | log.info("参数值:{}", param); |
| | | HttpEntity httpEntity = new StringEntity(param, "utf-8"); |
| | | httpPost.setEntity(httpEntity); |
| | | } |
| | | HttpResponse httpResponse = defaultHttpClient.execute(httpPost); |
| | | if (httpResponse.getStatusLine().getStatusCode() != 200) { |
| | | String errorLog = "请求失败,errorCode:" + httpResponse.getStatusLine().getStatusCode(); |
| | | log.info(errorLog); |
| | | throw new Exception(url + errorLog); |
| | | } |
| | | // 读取返回信息 |
| | | String output; |
| | | bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "utf-8")); |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | while ((output = bufferedReader.readLine()) != null) { |
| | | stringBuilder.append(output); |
| | | } |
| | | log.info("调用微信接口返回的参数:" + stringBuilder.toString()); |
| | | return stringBuilder.toString(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | throw e; |
| | | } finally { |
| | | if (defaultHttpClient != null) |
| | | defaultHttpClient.getConnectionManager().shutdown(); |
| | | if (bufferedReader != null) |
| | | bufferedReader.close(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * get请求 |
| | | * |
| | | * @param url |
| | | * 请求地址(get请求时参数自己组装到url上) |
| | | * @param headerMap |
| | | * 请求头 |
| | | * @return 响应文本 |
| | | */ |
| | | public static String get(String url, Map<String, String> headerMap, String param) { |
| | | // 请求地址,以及参数设置 |
| | | HttpPost post = new HttpPost(url); |
| | | if (headerMap != null) { |
| | | for (Map.Entry<String, String> entry : headerMap.entrySet()) { |
| | | post.setHeader(entry.getKey(), entry.getValue()); |
| | | } |
| | | } |
| | | if (StringUtils.isNotBlank(param)) { |
| | | log.info("参数值:{}", param); |
| | | HttpEntity httpEntity = new StringEntity(param, "utf-8"); |
| | | post.setEntity(httpEntity); |
| | | } |
| | | // 执行请求,获取相应 |
| | | return getRespString(post); |
| | | } |
| | | |
| | | /** |
| | | * 获取响应信息(String) |
| | | */ |
| | | public static String getRespString(HttpUriRequest request) { |
| | | // 获取响应流 |
| | | InputStream in = getRespInputStream(request); |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | String line; |
| | | |
| | | BufferedReader br = new BufferedReader(new InputStreamReader(in)); |
| | | try { |
| | | while ((line = br.readLine()) != null) { |
| | | sb.append(line); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | String str = sb.toString(); |
| | | return str; |
| | | } |
| | | |
| | | /** |
| | | * 获取响应信息(InputStream) |
| | | */ |
| | | public static InputStream getRespInputStream(HttpUriRequest request) { |
| | | // 获取响应对象 |
| | | HttpResponse response = null; |
| | | try { |
| | | response = HttpClients.createDefault().execute(request); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | if (response == null) { |
| | | return null; |
| | | } |
| | | // 获取Entity对象 |
| | | HttpEntity entity = response.getEntity(); |
| | | // 获取响应信息流 |
| | | InputStream in = null; |
| | | if (entity != null) { |
| | | try { |
| | | in = entity.getContent(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return in; |
| | | } |
| | | |
| | | } |