package com.mzl.flower.utils;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import lombok.SneakyThrows;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.http.*;
|
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
import org.apache.http.client.methods.*;
|
import org.apache.http.client.utils.URIBuilder;
|
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 java.io.IOException;
|
import java.net.URI;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
@Slf4j
|
public class HttpUtil {
|
|
public static JSONArray doRequestReturnArray(String method, String url, String requestType, Map<String, Object> paramHeader
|
, Map<String, Object> paramQuery, Map<String, Object> paramBody, Map<String, Object> paramInput) throws Exception {
|
JSONArray result = null;
|
HttpRequestBase request = getRequest(method, url, requestType, paramHeader, paramQuery, paramBody, paramInput);
|
|
CloseableHttpClient httpclient = HttpClients.createDefault();
|
HttpResponse response = httpclient.execute(request);
|
String r = handleResponse(response);
|
log.info("Http Service Task Result: " + r);
|
String[] results = r.split(":", 2);
|
if (StrUtil.equals(results[0], String.valueOf(HttpStatus.SC_OK))) {
|
String data = results[1];
|
if (StrUtil.isNotBlank(data)) {
|
result = JSON.parseArray(data);
|
}
|
}
|
httpclient.close();
|
|
return result;
|
}
|
|
private static HttpRequestBase getRequest(String method, String url, String requestType, Map<String, Object> paramHeader
|
, Map<String, Object> paramQuery, Map<String, Object> paramBody, Map<String, Object> paramInput) throws Exception {
|
HttpRequestBase request = null;
|
switch (method) {
|
case HttpGet.METHOD_NAME:
|
request = generateHttpGet(url, paramHeader, paramQuery, paramInput);
|
break;
|
case HttpPost.METHOD_NAME:
|
request = generateHttpPost(url, requestType, paramHeader, paramQuery, paramBody, paramInput);
|
break;
|
case HttpPut.METHOD_NAME:
|
request = generateHttpPut(url, requestType, paramHeader, paramQuery, paramBody, paramInput);
|
break;
|
case HttpDelete.METHOD_NAME:
|
request = generateHttpDelete(url, paramHeader, paramQuery, paramInput);
|
break;
|
case HttpPatch.METHOD_NAME:
|
break;
|
default:
|
throw new Exception(method + " HTTP method not supported");
|
}
|
|
return request;
|
}
|
|
public static JSONObject doRequest(String method, String url, String requestType, Map<String, Object> paramHeader
|
, Map<String, Object> paramQuery, Map<String, Object> paramBody, Map<String, Object> paramInput) throws Exception {
|
JSONObject result = null;
|
HttpRequestBase request = getRequest(method, url, requestType, paramHeader, paramQuery, paramBody, paramInput);
|
|
CloseableHttpClient httpclient = HttpClients.createDefault();
|
HttpResponse response = httpclient.execute(request);
|
String r = handleResponse(response);
|
log.info("Http Service Task Result: " + r);
|
String[] results = r.split(":", 2);
|
if (StrUtil.equals(results[0], String.valueOf(HttpStatus.SC_OK))) {
|
String data = results[1];
|
if (StrUtil.isNotBlank(data)) {
|
result = JSON.parseObject(data);
|
}
|
}
|
httpclient.close();
|
|
return result;
|
}
|
|
public static String doRequestReturnString(String method, String url, String requestType, Map<String, Object> paramHeader
|
, Map<String, Object> paramQuery, Map<String, Object> paramBody, Map<String, Object> paramInput) throws Exception {
|
HttpRequestBase request = getRequest(method, url, requestType, paramHeader, paramQuery, paramBody, paramInput);
|
|
CloseableHttpClient httpclient = HttpClients.createDefault();
|
HttpResponse response = httpclient.execute(request);
|
String r = handleResponse(response);
|
log.info("Http Service Task Result: " + r);
|
String[] results = r.split(":", 2);
|
if (StrUtil.equals(results[0], String.valueOf(HttpStatus.SC_OK))) {
|
String data = results[1];
|
if (StrUtil.isNotBlank(data)) {
|
return data;
|
}
|
}
|
httpclient.close();
|
|
return "";
|
}
|
|
@SneakyThrows
|
private static HttpGet generateHttpGet(String url, Map<String, Object> requestHeaders, Map<String, Object> requestQueries,
|
Map<String, Object> requestInputParams) {
|
HttpGet get = new HttpGet();
|
|
for (Map.Entry<String, Object> entry : requestHeaders.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
get.addHeader(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
|
URIBuilder uriBuilder = new URIBuilder(url);
|
for (Map.Entry<String, Object> entry : requestQueries.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
uriBuilder.setParameter(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
for (Map.Entry<String, Object> entry : requestInputParams.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
uriBuilder.setParameter(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
URI uri = uriBuilder.build();
|
get.setURI(uri);
|
return get;
|
}
|
|
@SneakyThrows
|
private static HttpPost generateHttpPost(String url, String requestType,
|
Map<String, Object> requestHeaders, Map<String, Object> requestQueries,
|
Map<String, Object> requestBodies, Map<String, Object> requestInputParams) {
|
HttpPost post = new HttpPost();
|
|
for (Map.Entry<String, Object> entry : requestHeaders.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
post.addHeader(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
|
URIBuilder uriBuilder = new URIBuilder(url);
|
if(requestQueries!=null){
|
for (Map.Entry<String, Object> entry : requestQueries.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
uriBuilder.setParameter(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
}
|
|
requestInputParams.putAll(requestBodies);
|
if (StrUtil.equals("json", requestType)) {
|
String inputParam = JSON.toJSONString(requestInputParams);
|
log.info("Post param: " + inputParam);
|
post.setEntity(new StringEntity(inputParam, "UTF-8"));
|
}
|
|
if (StrUtil.equals("form", requestType)) {
|
List<BasicNameValuePair> pair = new ArrayList<>();
|
for (Map.Entry<String, Object> entry : requestInputParams.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
pair.add(new BasicNameValuePair(entry.getKey(), (String) entry.getValue()));
|
}
|
}
|
post.setEntity(new UrlEncodedFormEntity(pair));
|
}
|
|
URI uri = uriBuilder.build();
|
post.setURI(uri);
|
return post;
|
}
|
|
@SneakyThrows
|
private static HttpPut generateHttpPut(String url, String requestType,
|
Map<String, Object> requestHeaders, Map<String, Object> requestQueries,
|
Map<String, Object> requestBodies, Map<String, Object> requestInputParams) {
|
HttpPut put = new HttpPut();
|
|
for (Map.Entry<String, Object> entry : requestHeaders.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
put.addHeader(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
|
URIBuilder uriBuilder = new URIBuilder(url);
|
for (Map.Entry<String, Object> entry : requestQueries.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
uriBuilder.setParameter(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
|
requestInputParams.putAll(requestBodies);
|
if (StrUtil.equals("json", requestType)) {
|
String inputParam = JSON.toJSONString(requestInputParams);
|
log.info("Post param: " + inputParam);
|
put.setEntity(new StringEntity(inputParam, "UTF-8"));
|
}
|
|
if (StrUtil.equals("form", requestType)) {
|
List<BasicNameValuePair> pair = new ArrayList<>();
|
for (Map.Entry<String, Object> entry : requestInputParams.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
pair.add(new BasicNameValuePair(entry.getKey(), (String) entry.getValue()));
|
}
|
}
|
put.setEntity(new UrlEncodedFormEntity(pair));
|
}
|
|
URI uri = uriBuilder.build();
|
put.setURI(uri);
|
return put;
|
}
|
|
@SneakyThrows
|
private static HttpDelete generateHttpDelete(String url, Map<String, Object> requestHeaders, Map<String, Object> requestQueries,
|
Map<String, Object> requestInputParams) {
|
HttpDelete delete = new HttpDelete();
|
|
for (Map.Entry<String, Object> entry : requestHeaders.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
delete.addHeader(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
|
URIBuilder uriBuilder = new URIBuilder(url);
|
for (Map.Entry<String, Object> entry : requestQueries.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
uriBuilder.setParameter(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
for (Map.Entry<String, Object> entry : requestInputParams.entrySet()) {
|
if (entry.getValue() instanceof String) {
|
uriBuilder.setParameter(entry.getKey(), (String) entry.getValue());
|
}
|
}
|
URI uri = uriBuilder.build();
|
delete.setURI(uri);
|
return delete;
|
}
|
|
private static String handleResponse(HttpResponse response) throws IOException {
|
final StatusLine statusLine = response.getStatusLine();
|
final HttpEntity entity = response.getEntity();
|
if (statusLine.getStatusCode() != HttpStatus.SC_OK) {
|
EntityUtils.consume(entity);
|
return StrUtil.format("{}:{}", statusLine.getStatusCode(), statusLine.getReasonPhrase());
|
}
|
return StrUtil.format("{}:{}", statusLine.getStatusCode(),
|
entity == null ? null : EntityUtils.toString(entity, Consts.UTF_8));
|
}
|
|
public static JSONObject processHttp(HttpUriRequest request) {
|
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
CloseableHttpResponse response = null;
|
|
String result = "";
|
try {
|
// 由客户端执行请求
|
response = httpClient.execute(request);
|
// 从响应模型中获取响应实体
|
HttpEntity responseEntity = response.getEntity();
|
StatusLine statusLine = response.getStatusLine();
|
log.info("响应状态为:" + statusLine);
|
if (statusLine.getStatusCode() == 200 && responseEntity != null) {
|
result = EntityUtils.toString(responseEntity);
|
}
|
} catch (Exception e) {
|
log.error(e.getMessage());
|
} finally {
|
try {
|
// 释放资源
|
if (httpClient != null) {
|
httpClient.close();
|
}
|
if (response != null) {
|
response.close();
|
}
|
} catch (Exception e) {
|
log.error(e.getMessage(), e);
|
}
|
}
|
log.info("==============> response: " + result);
|
if(StringUtils.isNotEmpty(result)){
|
return JSON.parseObject(result);
|
}
|
|
return null;
|
}
|
}
|