package com.panzhihua.common.utlis;
|
|
|
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.entity.StringEntity;
|
import org.apache.http.impl.client.DefaultHttpClient;
|
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 java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @program: springcloud_k8s_panzhihuazhihuishequ
|
* @description:
|
* @author: huang.hongfa weixin hhf9596 qq 959656820
|
* @create: 2021-01-08 10:23
|
**/
|
@Slf4j
|
public class HttpClientUtil {
|
/**
|
* 通过post方式调用http接口
|
* @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) {
|
//声明返回结果
|
String result = "";
|
//开始请求API接口时间
|
long startTime=System.currentTimeMillis();
|
//请求API接口的响应时间
|
long endTime= 0L;
|
HttpEntity httpEntity = null;
|
HttpResponse httpResponse = null;
|
HttpClient httpClient = null;
|
try {
|
// 创建连接
|
httpClient = HttpClientFactory.getInstance().getHttpClient();
|
// 设置请求头和报文
|
HttpPost httpPost = HttpClientFactory.getInstance().httpPost(url);
|
Header header=new BasicHeader("Accept-Encoding",null);
|
httpPost.setHeader(header);
|
if (!ObjectUtils.isEmpty(headerKey)) {
|
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);
|
//执行发送,获取相应结果
|
httpResponse = httpClient.execute(httpPost);
|
httpEntity= httpResponse.getEntity();
|
result = EntityUtils.toString(httpEntity);
|
} catch (Exception 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);
|
if (result != null && !"".equals(result)) {
|
return result;
|
}
|
}
|
}finally {
|
try {
|
EntityUtils.consume(httpEntity);
|
} catch (IOException e) {
|
log.error("http请求释放资源异常",e);
|
}
|
}
|
//请求接口的响应时间
|
endTime=System.currentTimeMillis();
|
log.info("请求{}接口的响应报文内容为{},本次请求API接口的响应时间为:{}毫秒",url,result,(endTime-startTime));
|
return result;
|
|
}
|
|
/**
|
* 使用http请求调用接口,参数类型为xml
|
* @param urlStr 请求地址
|
* @param data 请求参数
|
* @return 调用结果
|
*/
|
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("Cache-Control", "no-cache");
|
con.setRequestProperty("Content-Type", "text/xml");
|
|
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()));
|
String line = "";
|
StringBuffer sb = new StringBuffer();
|
for (line = br.readLine(); line != null; line = br.readLine()) {
|
sb.append(line);
|
}
|
return sb.toString();
|
} catch (MalformedURLException e) {
|
e.printStackTrace();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
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);
|
}
|
return stringBuilder.toString();
|
} catch (IOException e) {
|
e.printStackTrace();
|
throw e;
|
} finally {
|
if (defaultHttpClient != null)
|
defaultHttpClient.getConnectionManager().shutdown();
|
if (bufferedReader != null)
|
bufferedReader.close();
|
}
|
}
|
|
|
|
|
}
|