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/关闭,否则连接无法复用。