package com.panzhihua.common.utlis;
|
|
import java.io.*;
|
import java.net.HttpURLConnection;
|
import java.net.MalformedURLException;
|
import java.net.URL;
|
import java.net.URLConnection;
|
import java.security.KeyManagementException;
|
import java.security.KeyStore;
|
import java.security.KeyStoreException;
|
import java.security.NoSuchAlgorithmException;
|
import java.security.cert.CertificateException;
|
import java.security.cert.X509Certificate;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import com.alibaba.fastjson.JSONObject;
|
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.config.RequestConfig;
|
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.client.methods.HttpUriRequest;
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
import org.apache.http.conn.ssl.TrustStrategy;
|
import org.apache.http.entity.StringEntity;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.DefaultHttpClient;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.message.BasicHeader;
|
import org.apache.http.ssl.SSLContexts;
|
import org.apache.http.util.EntityUtils;
|
import org.springframework.util.ObjectUtils;
|
|
import com.panzhihua.common.constants.HttpConstant;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import javax.net.ssl.SSLContext;
|
|
import static com.panzhihua.common.utlis.wx.WXPayConstants.USER_AGENT;
|
|
/**
|
* @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:{}"+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=utf-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();
|
}
|
}
|
|
|
|
// HTTP GET请求
|
public static String sendGet(String url) throws Exception {
|
URL obj = new URL(url);
|
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
//默认值GET
|
con.setRequestMethod("GET");
|
//添加请求头
|
con.setRequestProperty("User-Agent", USER_AGENT);
|
int responseCode = con.getResponseCode();
|
log.info("发送 'GET' 请求到 URL:{}" + url);
|
log.info("Response Code:{}" + responseCode);
|
BufferedReader in = new BufferedReader(
|
new InputStreamReader(con.getInputStream()));
|
String inputLine;
|
StringBuffer response = new StringBuffer();
|
while ((inputLine = in.readLine()) != null) {
|
response.append(inputLine);
|
}
|
in.close();
|
//打印结果
|
log.info("uu洗车返回:{}"+response.toString());
|
return response.toString();
|
}
|
|
/**
|
* http请求工具类,post请求
|
*
|
* @param url
|
* url
|
* @param param
|
* 参数值 仅支持String
|
* @return
|
* @throws Exception
|
*/
|
public static String httpPostAndToken(String url, String param,Map headerMap) throws Exception {
|
DefaultHttpClient defaultHttpClient = null;
|
BufferedReader bufferedReader = null;
|
try {
|
defaultHttpClient = new DefaultHttpClient();
|
HttpPost httpPost = new HttpPost(url);
|
httpPost.setHeader("Content-Type", "application/json;charset=utf-8");
|
// httpPost.setHeader("Authorization", headerMap.get("Authorization").toString());
|
// httpPost.setHeader("Host", headerMap.get("Host").toString());
|
|
for (Object key : headerMap.keySet()) {
|
httpPost.setHeader(key.toString(), headerMap.get(key).toString());
|
}
|
if (StringUtils.isNotBlank(param)) {
|
log.info("参数值:{}", param);
|
HttpEntity httpEntity = new StringEntity(param, "utf-8");
|
httpPost.setEntity(httpEntity);
|
// httpPost.setHeader("Content-Length", String.valueOf(httpEntity.getContentLength()));
|
}
|
HttpResponse httpResponse = defaultHttpClient.execute(httpPost);
|
if (httpResponse.getStatusLine().getStatusCode() != 200) {
|
int statusCode = httpResponse.getStatusLine().getStatusCode();
|
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();
|
}
|
}
|
|
public static void main(String[] args) throws IOException {
|
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
|
HttpPost httpPost = new HttpPost("https://dptest.d-power.com.cn:14404/v1/face");
|
// httpPost.setHeader("Content-Type", "application/json;charset=utf-8");
|
httpPost.setHeader("Authorization", "DpToken P3JHgjLbyljfLrFnS9OZbATRJmacdt4b");
|
httpPost.setHeader("Host", "123.60.2.66");
|
// httpPost.setHeader("Content-Length", String.valueOf(entity.getContentLength()));
|
|
// httpPost.setHeader("User-Agent", "Apache-HttpClient/4.5.12 (Java/1.8.0_162)[\\r][\\n]");
|
httpPost.setEntity(new StringEntity("{\"positions\":[{\"role\":\"occupant\",\"communityId\":\"64f99b2ed26106d4f0fe93f4\",\"unitId\":\"64f99b2ed26106d4f0fe93f7\"}],\"tel\":\"15696695118\",\"name\":\"四月里3\",\"timeout\":10,\"image\":\"fsdfsdfsdf\"}", "utf-8"));
|
// httpPost.setHeader("Content-Length", String.valueOf(entity.getContentLength()));
|
HttpResponse httpResponse = defaultHttpClient.execute(httpPost);
|
System.out.println(httpResponse.getEntity());
|
}
|
|
/**
|
* 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);
|
}
|
|
/**
|
* get请求
|
*
|
* @param url
|
* 请求地址(get请求时参数自己组装到url上)
|
* @param headerMap
|
* 请求头
|
* @return 响应文本
|
*/
|
public static String getUU(String url, Map<String, String> headerMap, String param) {
|
// 请求地址,以及参数设置
|
HttpPost post = new HttpPost(url);
|
|
SSLContext sslContext = null;
|
try {
|
sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
|
@Override
|
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
|
return true;
|
}
|
}).build();
|
} catch (NoSuchAlgorithmException e) {
|
e.printStackTrace();
|
} catch (KeyManagementException e) {
|
e.printStackTrace();
|
} catch (KeyStoreException e) {
|
e.printStackTrace();
|
}
|
|
CloseableHttpClient client = HttpClients.custom().setSslcontext(sslContext).
|
setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
|
|
|
//请求超时时间设置
|
post.setConfig(RequestConfig.custom()// 连接超时时间
|
.setConnectTimeout(5000)
|
// 请求超时时间
|
.setConnectionRequestTimeout(5000)
|
// Socket读取超时时间
|
.setSocketTimeout(5000)
|
// 是否允许重定向
|
.setRedirectsEnabled(false)
|
.build());
|
|
//发送请求
|
CloseableHttpResponse response = null;
|
try {
|
response = client.execute(post);
|
} catch (IOException e) {
|
e.printStackTrace();
|
log.error("request error. ");
|
|
}
|
HttpEntity entity = response.getEntity();
|
try {
|
if (entity != null) {
|
//按指定编码转换结果实体为String类型
|
return EntityUtils.toString(entity, "UTF-8");
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
return null;
|
}
|
|
|
|
/**
|
* 获取响应信息(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;
|
}
|
|
/**
|
* 退款请求微信
|
* @param url 请求地址
|
* @param data 请求数据
|
* @param mchId 商户id
|
* @param isTest 是否是测试
|
* @return 退款结果
|
* @throws Exception 抛出异常
|
*/
|
public static String doRefund(String url, String data,String mchId,Boolean isTest) throws Exception{
|
KeyStore keyStore = KeyStore.getInstance("PKCS12");
|
//P12文件目录 证书路径,这里需要你自己修改,linux下还是windows下的根路径
|
String filepath = "/mnt/data/refund/huacheng/";
|
|
System.out.println("filepath->"+filepath);
|
FileInputStream instream = new FileInputStream(filepath+"apiclient_cert.p12");
|
try {
|
keyStore.load(instream, mchId.toCharArray());//这里写密码..默认是你的MCHID
|
} finally {
|
instream.close();
|
}
|
|
// Trust own CA and all self-signed certs
|
SSLContext sslcontext = SSLContexts.custom()
|
.loadKeyMaterial(keyStore, mchId.toCharArray())//这里也是写密码的
|
.build();
|
// Allow TLSv1 protocol only
|
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
|
sslcontext,
|
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
|
CloseableHttpClient httpclient = HttpClients.custom()
|
.setSSLSocketFactory(sslsf)
|
.build();
|
try {
|
HttpPost httpost = new HttpPost(url); // 设置响应头信息
|
httpost.addHeader("Connection", "keep-alive");
|
httpost.addHeader("Accept", "*/*");
|
httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
|
httpost.addHeader("Host", "api.mch.weixin.qq.com");
|
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
|
httpost.addHeader("Cache-Control", "max-age=0");
|
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
|
httpost.setEntity(new StringEntity(data, "UTF-8"));
|
CloseableHttpResponse response = httpclient.execute(httpost);
|
try {
|
HttpEntity entity = response.getEntity();
|
|
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
|
log.info("请求微信退款接口返回结果:" + JSONObject.toJSONString(jsonStr));
|
EntityUtils.consume(entity);
|
return jsonStr;
|
} finally {
|
response.close();
|
}
|
} finally {
|
httpclient.close();
|
}
|
|
}
|
}
|