1. 记录几个常用方法
请求需求 | 请求代码 | 备注 |
---|---|---|
无参get请求 | HttpUtil.doGet(url) | 参数:路径 |
带参数get请求 | HttpUtil.doGet(url,map) | 参数:路径url,Map(String,String)键值对参数 |
无参post请求 | HttpUtil.doPost(url) | 效果同HttpUtil.doPost(url,空map) |
post请求(map键值对) | HttpUtil.doPost(url,map) | 参数:路径url,Map(String,String)键值对参数 |
post请求(json参数) | HttpUtil.doPost(url, content, type) | url: 路径 content: 内容 type: 1. application/json 2. application/xml 3. text/plain |
post请求(json参数) | HttpUtil.doPostWithHeader(url,param,map) | url: 路径;param:json字串;map<String,string>: 请求头参数 |
2. 使用
2.1 引入相关依赖
<!-- pom.xml -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
2.2 工具类
package com.example.study1.common.utils;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
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.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Sean
* @createDate 2022/7/20-22:28
*/
public class HttpUtil {
private static final Logger log = LoggerFactory.getLogger(HttpUtil.class);
private static PoolingHttpClientConnectionManager connMgr;
private static RequestConfig requestConfig;
private static final int MAX_TIMEOUT = 3600000;// 7秒
private static final String UTF_8 = "UTF-8";
public static final String JSON = "json";
public static final String XML = "xml";
static {
// 设置连接池
connMgr = new PoolingHttpClientConnectionManager();
// 设置连接池大小
connMgr.setMaxTotal(100);
connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());
RequestConfig.Builder configBuilder = RequestConfig.custom();
// 设置连接超时
configBuilder.setConnectTimeout(MAX_TIMEOUT);
// 设置读取超时
configBuilder.setSocketTimeout(MAX_TIMEOUT);
// 设置从连接池获取连接实例的超时
configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
// 在提交请求之前 测试连接是否可用
configBuilder.setStaleConnectionCheckEnabled(true);
requestConfig = configBuilder.build();
}
/**
* 发送 GET 请求(HTTP),不带输入数据
*
* @param url
* @return
* @throws IOException
*/
public static String doGet(String url) throws IOException {
return doGet(url, null);
}
/**
* 发送 GET 请求(HTTP),K-V形式
*
* @param url
* @param params
* @return
* @throws IOException
*/
public static String doGet(String url, Map<String, String> params) throws IOException {
int i = 0;
if (params != null) {
StringBuffer param = new StringBuffer();
for (String key : params.keySet()) {
if (i == 0)
param.append("?");
else
param.append("&");
param.append(key).append("=").append(params.get(key));
i++;
}
url += param;
}
String result = null;
CloseableHttpClient httpclient = HttpClients.createDefault()