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>

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 工厂,信任所有证书。

部分源码实例如下

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 | KeyManagementException e) {
    e.printStackTrace();
  }
  return null;
}

3. HttpUtils 类文档

HttpUtils 是一个 HTTP 请求工具类,基于 OkHttp 库实现。提供了常用的 GET 和 POST 请求方法。

公共方法

GET 请求方法

  1. get(String url, Map<String, String> headerMap) 向指定 URL 发送带有可选头的 HTTP GET 请求。

    • 参数:
      • url - 发送 GET 请求的 URL。
      • headerMap - 包含要附加到请求的头名称和值的映射。如果不需要头,则可以为 null
    • 返回值: Response - 服务器的响应。
    • 抛出: 如果请求过程中发生错误,则抛出 Exception
  2. 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 请求方法

  1. 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
  1. post
post(String url, Map<String, String> headerMap, Map<String, String> paramMap)

使用参数映射发送 HTTP POST 请求。

  • 参数:
    • url - 发送 POST 请求的 URL。
    • headerMap - 包含头名称和值的映射。
    • paramMap - 包含表单数据名称和值的映射。
  • 返回值: Response - 服务器的响应。
  • 抛出: 如果请求过程中发生错误,则抛出 Exception
  1. post
post(String url, Map<String, String> headerMap, String bodyString)

发送带有字符串体的 HTTP POST 请求。

  • 参数:
    • url - 发送 POST 请求的 URL。
    • headerMap - 包含头名称和值的映射。
    • bodyString - 代表请求体的字符串。
  • 返回值: Response - 服务器的响应。
  • 抛出: 如果请求过程中发生错误,则抛出 Exception
  1. post
post(String url, Map<String, String> headerMap)

发送带有可选头的 HTTP POST 请求。

  • 参数:
    • url - 发送 POST 请求的 URL。
    • headerMap - 包含头名称和值的映射。如果不需要头,则可以为 null
  • 返回值: Response - 服务器的响应。
  • 抛出: 如果请求过程中发生错误,则抛出 Exception
  1. 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
  • 请确保在实现中包含错误处理,以管理可能出现的网络问题或意外的响应状态。