java 技术随笔

HttpClient 4.5教程,HttpClient 中文文档

背景

学习 Java 的 HttpClient 时,官方只有英文文档(httpcomponents-client-4.5.x tutorial),中文资料较少,后来找到一篇不错的翻译:HttpClient 4.5 中文文档。下面整理最常用的最小可用示例。

核心类

  • CloseableHttpClient:线程安全的 HTTP 客户端,通过 HttpClients.createDefault() 创建。
  • HttpGet / HttpPost:请求对象。
  • RequestConfig:配置连接超时、读取超时、代理等。
  • CloseableHttpResponse:响应对象,用完后必须关闭。

GET 请求示例

CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("https://example.com/api");
RequestConfig config = RequestConfig.custom()
        .setConnectTimeout(5000)
        .setSocketTimeout(5000)
        .build();
httpGet.setConfig(config);
try (CloseableHttpResponse response = httpclient.execute(httpGet)) {
    HttpEntity entity = response.getEntity();
    String result = EntityUtils.toString(entity, "UTF-8");
    System.out.println(result);
    EntityUtils.consume(entity);
}

POST 表单示例

HttpPost httpPost = new HttpPost("https://example.com/login");
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
try (CloseableHttpResponse response = httpclient.execute(httpPost)) {
    System.out.println(EntityUtils.toString(response.getEntity(), "UTF-8"));
}

注意事项

  • 推荐用连接池 PoolingHttpClientConnectionManager 替代 createDefault(),避免高并发下频繁建连。
  • 4.3+ 后已改为 CloseableHttpClient,旧教程里的 DefaultHttpClient 已废弃。
  • 响应体一定要 consume/关闭,否则连接无法复用。
标签
httpclientjava