package com.iot.common.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.http.*;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.util.List;
/**
* http请求工具类
*
* @since 2020-03-25
*/
public class HttpUtils {
/**
* get请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String get(String url, MultiValueMap<String, String> params) {
return get(url, params, null);
}
/**
* get请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String get(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.GET);
}
/**
* post请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String post(String url, MultiValueMap<String, String> params) {
return post(url, params, null);
}
/**
* post请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.POST);
}
/**
* json请求
* @param url
* @param jsonStr
* @return
*/
public static String postJson(String url, String jsonStr) {
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setConnectTimeout(10*1000);
// requestFactory.setReadTimeout(10*1000);
// RestTemplate rest = new RestTemplate(requestFactory);
//
// SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// requestFactory.setConnectTimeout(5 * 1000);
// requestFactory.setReadTimeout(5 * 1000);
RestTemplate client = new RestTemplate(requestFactory);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> requestEntity = new HttpEntity<>(jsonStr, headers);
// 执行HTTP请求
ResponseEntity<String> response = client.exchange(url, HttpMethod.POST, requestEntity, String.class);
return response.getBody();
}
/**
* json请求
* @param url
* @param jsonStr
* @return
*/
public static String postJson(HttpHeaders headers,String url, String jsonStr) {
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setConnectTimeout(10*1000);
// requestFactory.setReadTimeout(10*1000);
// RestTemplate rest = new RestTemplate(requestFactory);
//
// SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// requestFactory.setConnectTimeout(5 * 1000);
// requestFactory.setReadTimeout(5 * 1000);
RestTemplate client = new RestTemplate(requestFactory);
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> requestEntity = new HttpEntity<>(jsonStr, headers);
System.out.println(JSONObject.toJSONString(requestEntity));
// 执行HTTP请求
ResponseEntity<String> response = client.exchange(url, HttpMethod.POST, requestEntity, String.class);
return response.getBody();
}
/**
* Content-Type = application/x-www-form-urlencoded
* @param url
* @param list
* @return
*/
public static String post(String url, List<NameValuePair> list) {
// 创建HttpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
// 设置请求超时配置
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000) // 连接超时时间,单位毫秒
.setSocketTimeout(5000) // 读取超时时间,单位毫秒
.setConnectionRequestTimeout(5000) // 获取连接的超时时间,单位毫秒
.build();
try {
// 创建HttpPost对象
HttpPost post = new HttpPost(url);
post.setConfig(requestConfig);
post.setEntity(new UrlEncodedFormEntity(list, "utf-8"));
// 执行请求
CloseableHttpResponse response = httpClient.execute(post);
// 处理响应
org.apache.http.HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity, "utf-8");
// 关闭响应
response.close();
return content;
} catch (IOException e) {
e.printStackTrace();
System.out.println("http请求异常" + e.getMessage());
} finally {
try {
// 释放资源
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("http关闭异常" + e.getMessage());
}
}
return "";
}
/**
* put请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String put(String url, MultiValueMap<String, String> params) {
return put(url, params, null);
}
/**
* put请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.PUT);
}
/**
* delete请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String delete(String url, MultiValueMap<String, String> params) {
return delete(url, params, null);
}
/**
* delete请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.DELETE);
}
/**
* 表单请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @param method 请求方式
* @return
*/
public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
if (params == null) {
params = new LinkedMultiValueMap<>();
}
return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
}
/**
* http请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @param method 请求方式
* @param mediaType 参数类型
* @return
*/
public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
if (url == null || url.trim().isEmpty()) {
return null;
}
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(5000); // 设置连接超时为5000毫秒(5秒)
requestFactory.setReadTimeout(5000); // 设置读取超时为5000毫秒(5秒)
RestTemplate client = new RestTemplate(requestFactory);
// header
HttpHeaders httpHeaders = new HttpHeaders();
if (headers != null) {
httpHeaders.addAll(headers);
}
// 提交方式:表单、json
httpHeaders.setContentType(mediaType);
HttpEntity<Object> httpEntity = new HttpEntity<>(params, httpHeaders);
ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
// System.out.println(response);
return response.getBody();
}
}