qa-prevention-gwj/src/main/java/com/zcloud/util/HttpClientService.java

573 lines
21 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.zcloud.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zcloud.entity.PageData;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
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.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
/**
* HttpClient发送GET、POST请求
* @Author libin
* @CreateDate 2018.5.28 16:56
*/
public class HttpClientService {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientService.class);
/**
* 返回成功状态码
*/
private static final int SUCCESS_CODE = 200;
/**
* 发送GET请求
* @param url 请求url
* @param nameValuePairList 请求参数
* @return JSON或者字符串
* @throws Exception
*/
public static Object sendGet(String url, List<NameValuePair> nameValuePairList) throws Exception{
JSONObject jsonObject = null;
CloseableHttpClient client = null;
CloseableHttpResponse response = null;
try{
/**
* 创建HttpClient对象
*/
client = HttpClients.createDefault();
/**
* 创建URIBuilder
*/
URIBuilder uriBuilder = new URIBuilder(url);
/**
* 设置参数
*/
uriBuilder.addParameters(nameValuePairList);
/**
* 创建HttpGet
*/
HttpGet httpGet = new HttpGet(uriBuilder.build());
/**
* 设置请求头部编码
*/
httpGet.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"));
/**
* 设置返回编码
*/
httpGet.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
/**
* 请求服务
*/
response = client.execute(httpGet);
/**
* 获取响应吗
*/
int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 获取返回对象
*/
HttpEntity entity = response.getEntity();
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(entity,"UTF-8");
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
return jsonObject;
}catch (Exception e){
return result;
}
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg{}", 97, "GET请求失败");
}
}catch (Exception e){
LOGGER.error("HttpClientService-line: {}, Exception: {}", 100, e);
} finally {
response.close();
client.close();
}
return null;
}
/**
* 发送POST请求
* @param url
* @param nameValuePairList
* @return JSON或者字符串
* @throws Exception
*/
public static Object sendPost(String url, List<NameValuePair> nameValuePairList) throws Exception{
JSONObject jsonObject = null;
HttpClient client = new SSLClient();
HttpResponse response = null;
try{
/**
* 创建一个httpclient对象
*/
client = HttpClients.createDefault();
/**
* 创建一个post对象
*/
HttpPost post = new HttpPost(url);
/**
* 包装成一个Entity对象
*/
StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8");
/**
* 设置请求的内容
*/
post.setEntity(entity);
/**
* 设置请求的报文头部的编码
*/
post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded;"));
/**
* 设置请求的报文头部的编码
*/
post.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
/**
* 执行post请求
*/
response = client.execute(post);
/**
* 获取响应码
*/
int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(response.getEntity(),"UTF-8");
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
return jsonObject;
}catch (Exception e){
return result;
}
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg{}", 146, "POST请求失败");
}
}catch (Exception e){
LOGGER.error("HttpClientService-line: {}, Exception{}", 149, e);
}finally {
/* response.close();
client.close();*/
}
return null;
}
/**
* 发送POST请求
* @param url
* @param headerMap
* @param bodyMap
* @return JSON或者字符串
* @throws Exception
*/
public static Object sendPostJson(String url, Map<String, Object> headerMap, Map<String, Object> bodyMap) throws Exception{
JSONObject jsonObject = null;
HttpClient client = new SSLClient();
HttpResponse response = null;
try{
/**
* 创建一个httpclient对象
*/
client = HttpClients.createDefault();
/**
* 创建一个post对象
*/
HttpPost post = new HttpPost(url);
for (Map.Entry<String, Object> entry : headerMap.entrySet()) {
post.setHeader(entry.getKey(), entry.getValue().toString());
}
/**
* 包装成一个Entity对象
*/
StringEntity entity = new StringEntity(JSONObject.toJSONString(bodyMap), ContentType.create("application/json", "utf-8"));
/**
* 设置请求的内容
*/
post.setEntity(entity);
/**
* 执行post请求
*/
response = client.execute(post);
/**
* 获取响应码
*/
int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(response.getEntity(),"UTF-8");
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
return jsonObject;
}catch (Exception e){
return result;
}
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg{}", 146, "POST请求失败");
}
}catch (Exception e){
LOGGER.error("HttpClientService-line: {}, Exception{}", 149, e);
}finally {
/* response.close();
client.close();*/
}
return null;
}
/**
* 发送POST请求
* @param url
* @param headerMap
* @param bodyMap
* @return JSON或者字符串
* @throws Exception
*/
public static Map<String, Object> sendPostJsonForMap(String url, Map<String, Object> headerMap, PageData bodyMap) throws Exception{
JSONObject jsonObject = null;
HttpClient client = new SSLClient();
HttpResponse response = null;
try{
/**
* 创建一个httpclient对象
*/
client = HttpClients.createDefault();
/**
* 创建一个post对象
*/
HttpPost post = new HttpPost(url);
for (String key : headerMap.keySet()) {
post.setHeader(key, headerMap.get(key).toString());
}
/**
* 包装成一个Entity对象
*/
StringEntity entity = new StringEntity(JSONObject.toJSONString(bodyMap), ContentType.create("application/json", "utf-8"));
/**
* 设置请求的内容
*/
post.setEntity(entity);
/**
* 执行post请求
*/
response = client.execute(post);
/**
* 获取响应码
*/
int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(response.getEntity(),"UTF-8");
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
Map<String, Object> maps = new HashMap<String, Object>();
maps = parseJSON2Map(jsonObject);
return maps;
}catch (Exception e){
e.printStackTrace();
return null;
}
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg{}", 146, "POST请求失败");
}
}catch (Exception e){
LOGGER.error("HttpClientService-line: {}, Exception{}", 149, e);
}finally {
/* response.close();
client.close();*/
}
return null;
}
/**
* 发送POST请求无请求头Accept
* @param url
* @param nameValuePairList
* @return JSON或者字符串
* @throws Exception
*/
public static Object sendPostNoAccept(String url, List<NameValuePair> nameValuePairList) throws Exception{
JSONObject jsonObject = null;
HttpClient client = new SSLClient();
HttpResponse response = null;
try{
/**
* 创建一个httpclient对象
*/
client = HttpClients.createDefault();
/**
* 创建一个post对象
*/
HttpPost post = new HttpPost(url);
/**
* 包装成一个Entity对象
*/
StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8");
/**
* 设置请求的内容
*/
post.setEntity(entity);
/**
* 设置请求的报文头部的编码
*/
post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded;"));
/**
* 设置请求的报文头部的编码
*/
//post.setHeader(new BasicHeader("Accept", "text/plain;charset=utf-8"));
/**
* 执行post请求
*/
response = client.execute(post);
/**
* 获取响应码
*/
int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(response.getEntity(),"UTF-8");
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
return jsonObject;
}catch (Exception e){
return result;
}
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg{}", 146, "POST请求失败");
}
}catch (Exception e){
LOGGER.error("HttpClientService-line: {}, Exception{}", 149, e);
}finally {
/* response.close();
client.close();*/
}
return null;
}
/**
* 组织请求参数{参数名和参数值下标保持一致}
* @param params 参数名数组
* @param values 参数值数组
* @return 参数对象
*/
public static List<NameValuePair> getParams(Object[] params, Object[] values){
/**
* 校验参数合法性
*/
boolean flag = params.length>0 && values.length>0 && params.length == values.length;
if (flag){
List<NameValuePair> nameValuePairList = new ArrayList<>();
for(int i =0; i<params.length; i++){
nameValuePairList.add(new BasicNameValuePair(params[i].toString(),values[i].toString()));
}
return nameValuePairList;
}else{
LOGGER.error("HttpClientService-line: {}, errorMsg{}", 197, "请求参数为空且参数长度不一致");
}
return null;
}
public static void main(String[] args) throws Exception{
// String url = "http://192.168.210.7:8091/api/internal/sign";
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("userName", "9999");
// map.put("password", "123456");
// Object result2 = HttpClientService.sendPostJson(url, new HashMap<String, Object>(), map);
// System.out.println("POST返回信息" + result2);
String url = "http://192.168.210.7:8091/api/base/depts";
Map<String, Object> headerMap = new HashMap<String, Object>();
headerMap.put("appId", "app01");
headerMap.put("v", "1.0");
headerMap.put("random", "123456");
headerMap.put("timestamp", "1660639939220");
headerMap.put("sign", "396AADDF69F55EC719E3985C87B23C4C");
Map<String, Object> bodyMap = new HashMap<String, Object>();
bodyMap.put("pageIndex", 1);
bodyMap.put("pageSize", 100);
Object result2 = HttpClientService.sendPostJson(url, headerMap, bodyMap);
System.out.println("POST返回信息" + result2);
}
public static Map doPost(String url, PageData pd) {
/* 正式上面总是显示一次断一次,未找到原因
MultiValueMap<String, String> requestBody = new LinkedMultiValueMap();
pd.forEach((key, value) -> {
requestBody.add(key.toString(), value.toString());
});
System.out.println(requestBody);
Map<String,Object> responseBody = new HashMap<String,Object>();
TcpClient tcpClient = TcpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000) // Connection Timeout
.doOnConnected(connection ->
connection.addHandlerLast(new ReadTimeoutHandler(10)) // Read Timeout
.addHandlerLast(new WriteTimeoutHandler(10))); // Write Timeout
WebClient client = WebClient.builder().clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient))).build();
client.post()
.uri(url)
.header("Source","zcloud")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromFormData(requestBody))
.exchange()
.flatMap(response -> {
System.out.println("Status code: " + response.statusCode().value());
return response.bodyToMono(JSONObject.class);
})
.doOnSuccess(body -> {
System.out.println("success");
responseBody.putAll(body);
})
.doOnError(throwable -> {
responseBody.put("msg",throwable.getMessage());
System.out.println("Error occurred: " + throwable.getMessage());
})
.block();
return responseBody;
*/
JSONObject jsonObject = null;
HttpResponse response = null;
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
// pd.forEach((key, value) -> { // 这个遍历不好使
// System.out.println("键:" + key.toString() + ",值:" + value.toString());
// });
Map<Object, Object> map = (Map)pd;
System.out.print("参数:{");
for(Map.Entry<Object, Object> entry : map.entrySet()){
System.out.print(entry.getKey().toString() + ":" + entry.getValue().toString() + ",");
nameValuePairList.add(new BasicNameValuePair(entry.getKey().toString(), entry.getValue().toString()));
}
System.out.println("}");
try{
/**
* 创建一个httpclient对象
*/
HttpClient client = HttpClients.createDefault();
/**
* 创建一个post对象
*/
HttpPost post = new HttpPost(url);
/**
* 设置请求的报文头部的编码
*/
post.setHeader(new BasicHeader("Source", "zcloud"));
/**
* 设置请求的报文头部的编码
*/
post.setHeader(new BasicHeader("Content-Type", "application/x-www-form-urlencoded;"));
/**
* 包装成一个Entity对象
*/
StringEntity entity = new UrlEncodedFormEntity(nameValuePairList, "UTF-8");
/**
* 设置请求的内容
*/
post.setEntity(entity);
/**
* 执行post请求
*/
response = client.execute(post);
/**
* 获取响应码
*/
int statusCode = response.getStatusLine().getStatusCode();
// System.out.println("statusCode:" + statusCode);
if (SUCCESS_CODE == statusCode){
/**
* 通过EntityUitls获取返回内容
*/
String result = EntityUtils.toString(response.getEntity(),"UTF-8");
// System.out.println(result);
/**
* 转换成json,根据合法性返回json或者字符串
*/
try{
jsonObject = JSONObject.parseObject(result);
Map<String, Object> maps = new HashMap<String, Object>();
maps = parseJSON2Map(jsonObject);
return maps;
}catch (Exception e){
e.printStackTrace();
return null;
}
}else{
LOGGER.error("HttpClientUtil-line: {}, errorMsg{}", 146, "POST请求失败");
}
} catch (Exception e){
LOGGER.error("HttpClientUtil-line: {}, Exception{}", 149, e);
} finally {
/* response.close();
client.close();*/
}
return null;
}
public static Map<String, Object> parseJSON2Map(JSONObject json) {
Map<String, Object> map = new HashMap<String, Object>();
// 最外层解析
for (Object k : json.keySet()) {
Object v = json.get(k);
// 如果内层还是json数组的话继续解析
if (v instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<Object> it = ((JSONArray) v).iterator();
while (it.hasNext()) {
JSONObject json2 = (JSONObject) it.next();
list.add(parseJSON2Map(json2));
}
map.put(k.toString(), list);
} else if (v instanceof JSONObject) {
// 如果内层是json对象的话继续解析
map.put(k.toString(), parseJSON2Map((JSONObject) v));
} else {
// 如果内层是普通对象的话直接放入map中
map.put(k.toString(), v);
}
}
return map;
}
}