Contents

Apache HttpClient中自定义用户代理

1. 概述

本快速教程将展示如何使用 Apache HttpClient发送自定义User-Agent标头。

2.在HttpClient上设置User-Agent

2.1. HttpClient 4.3 之前

在使用旧版本的 Http Client(4.3 之前)时,设置User-Agent的值是通过低级 API完成的:

client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 Firefox/26.0");

同样可以通过更高级别的 API来完成——无需处理原始的http.useragent属性:

HttpProtocolParams.setUserAgent(client.getParams(), "Mozilla/5.0 Firefox/26.0");

一个完整的示例如下所示:

@Test
public void whenClientUsesCustomUserAgent_thenCorrect() 
  throws ClientProtocolException, IOException {
    DefaultHttpClient client = new DefaultHttpClient();
    HttpProtocolParams.setUserAgent(client.getParams(), "Mozilla/5.0 Firefox/26.0");
    HttpGet request = new HttpGet("http://www.github.com");
    client.execute(request);
}

2.2. HttpClient 4.3 之后

在最新版本的 Apache 客户端(4.3 之后)中,通过新的 fluent API 以更简洁的方式实现了相同的功能:

@Test
public void whenRequestHasCustomUserAgent_thenCorrect() 
  throws ClientProtocolException, IOException {
    HttpClient instance = HttpClients.custom().setUserAgent("Mozilla/5.0 Firefox/26.0").build();
    instance.execute(new HttpGet("http://www.github.com"));
}

3. 自定义User-Agent请求设置

自定义User-Agent标头也可以在单个请求上设置,而不是在整个HttpClient上:

@Test
public void givenDeprecatedApi_whenRequestHasCustomUserAgent_thenCorrect() 
  throws ClientProtocolException, IOException {
    HttpClient instance = HttpClients.custom().build();
    HttpGet request = new HttpGet(SAMPLE_URL);
    request.setHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 Firefox/26.0");
    instance.execute(request);
}