HttpUtils
添加依赖
com.litongjava.tio.utils.http.HttpUtils 是对 okhttp 的二次封装,使用前请添加 okhttp 依赖 HttpUtils
是一个使用 OkHttpClient 处理 HTTP 请求和响应的 Java 工具类。该类提供了一组静态方法,方便进行 GET 和 POST 请求,并处理请求头和请求体。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
</dependency>
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
1. ContentTypeUtils
简介
ContentTypeUtils
是一个工具类,用于根据文件扩展名获取对应的 MIME 类型。
使用方法
String fileExt = "jpg";
String contentType = ContentTypeUtils.getContentType(fileExt);
System.out.println("Content Type for .jpg: " + contentType);
详细说明
getContentType(String fileExt)
: 根据文件扩展名获取对应的 MIME 类型。如果扩展名未找到,返回默认值application/octet-stream
。
public static String getContentType(String fileExt) {
String result = map.get(fileExt);
if (result == null) {
result = map.get("anno");
}
return result;
}
2. OkHttpClientPool
简介
OkHttpClientPool
是一个枚举类型的单例模式实现,用于管理 OkHttpClient 的连接池和 SSL 配置。
使用方法
获取 OkHttpClient 实例:
OkHttpClient client = OkHttpClientPool.getHttpClient();
详细说明
getHttpClient()
: 获取 OkHttpClient 实例。pool()
: 创建一个连接池,最大空闲连接数为 200,保持时间为 5 分钟。x509TrustManager()
: 创建一个信任所有证书的 TrustManager。sslSocketFactory()
: 创建一个 SSL Socket 工厂,信任所有证书。
部分源码实例如下
package com.litongjava.tio.utils.http;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
public enum OkHttpClientPool {
INSTANCE;
static okhttp3.OkHttpClient.Builder builder;
static {
builder = new OkHttpClient().newBuilder();
// 连接池
builder.connectionPool(pool());
// 信任连接
builder.sslSocketFactory(sslSocketFactory(), x509TrustManager());
// 连接超时
builder.connectTimeout(30L, TimeUnit.SECONDS).readTimeout(30L, TimeUnit.SECONDS).build();
}
public static OkHttpClient getHttpClient() {
return builder.build();
}
private static ConnectionPool pool() {
return new ConnectionPool(200, 5, TimeUnit.MINUTES);
}
public static X509TrustManager x509TrustManager() {
return new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
}
public static SSLSocketFactory sslSocketFactory() {
try {
// 信任任何链接
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] { x509TrustManager() }, new SecureRandom());
return sslContext.getSocketFactory();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return null;
}
}
3. HttpUtils 类文档
HttpUtils
是一个 HTTP 请求工具类,基于 OkHttp 库实现。提供了常用的 GET 和 POST 请求方法。
公共方法
GET 请求方法
get(String url, Map<String, String> headerMap) 向指定 URL 发送带有可选头的 HTTP GET 请求。
- 参数:
url
- 发送 GET 请求的 URL。headerMap
- 包含要附加到请求的头名称和值的映射。如果不需要头,则可以为null
。
- 返回值:
Response
- 服务器的响应。 - 抛出: 如果请求过程中发生错误,则抛出
Exception
。
- 参数:
get(String url) 向指定 URL 发送 HTTP GET 请求。
- 参数:
url
- 发送 GET 请求的 URL。
- 返回值:
Response
- 服务器的响应。 - 抛出: 如果请求过程中发生错误,则抛出
Exception
。
- 参数:
GET 请求
带有 Header 的 GET 请求:
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer token");
Response response = HttpUtils.get("https://api.example.com/data", headers);
System.out.println(response.body().string());
不带 Header 的 GET 请求:
Response response = HttpUtils.get("https://api.example.com/data");
System.out.println(response.body().string());
POST 请求方法
- post
post(String url, Map<String, String> headerMap, List<String> paramNames, List<String> paramValues)
向指定 URL 发送带有可选头和表单参数的 HTTP POST 请求。
- 参数:
url
- 发送 POST 请求的 URL。headerMap
- 包含要附加到请求的头名称和值的映射。如果不需要头,则可以为null
。paramNames
- 表单数据的参数名称列表。paramValues
- 对应于paramNames
的参数值列表。
- 返回值:
Response
- 服务器的响应。 - 抛出: 如果请求过程中发生错误,则抛出
Exception
。
- post
post(String url, Map<String, String> headerMap, Map<String, String> paramMap)
使用参数映射发送 HTTP POST 请求。
- 参数:
url
- 发送 POST 请求的 URL。headerMap
- 包含头名称和值的映射。paramMap
- 包含表单数据名称和值的映射。
- 返回值:
Response
- 服务器的响应。 - 抛出: 如果请求过程中发生错误,则抛出
Exception
。
- post
post(String url, Map<String, String> headerMap, String bodyString)
发送带有字符串体的 HTTP POST 请求。
- 参数:
url
- 发送 POST 请求的 URL。headerMap
- 包含头名称和值的映射。bodyString
- 代表请求体的字符串。
- 返回值:
Response
- 服务器的响应。 - 抛出: 如果请求过程中发生错误,则抛出
Exception
。
- post
post(String url, Map<String, String> headerMap)
发送带有可选头的 HTTP POST 请求。
- 参数:
url
- 发送 POST 请求的 URL。headerMap
- 包含头名称和值的映射。如果不需要头,则可以为null
。
- 返回值:
Response
- 服务器的响应。 - 抛出: 如果请求过程中发生错误,则抛出
Exception
。
- post(String url)
向指定 URL 发送 HTTP POST 请求。- 参数:
url
- 发送 POST 请求的 URL。
- 返回值:
Response
- 服务器的响应。 - 抛出: 如果请求过程中发生错误,则抛出
Exception
。
- 参数:
POST 请求 带有 Header 和参数的 POST 请求:
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer token");
Map<String, String> params = new HashMap<>();
params.put("key1", "value1");
params.put("key2", "value2");
Response response = HttpUtils.post("https://api.example.com/submit", headers, params);
System.out.println(response.body().string());
带有 Header 和 JSON body 的 POST 请求:
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer token");
String jsonBody = "{\"key\":\"value\"}";
Response response = HttpUtils.post("https://api.example.com/submit", headers, jsonBody);
System.out.println(response.body().string());
确保在使用后正确处理 Response
对象并关闭它,以避免资源泄露。
注意事项
- 所有方法都抛出通用的
Exception
,因此建议根据使用场景处理特定异常。 - 该类使用
okhttp3
库发送和接收 HTTP 请求和响应。 - 管理
Response
对象非常重要。确保在使用后将其关闭,以释放网络资源。 - 该类不处理重试或更复杂的 HTTP 功能,如缓存或连接池。对于更高级的用例,请直接使用
OkHttpClient
。 - 请确保在实现中包含错误处理,以管理可能出现的网络问题或意外的响应状态。