1. 概述

本文将演示如何使用Apache HttpClient发送带有自定义User-Agent头的HTTP请求。这个技巧在需要模拟特定浏览器行为或绕过服务器端User-Agent检测时特别实用。

2. 在HttpClient全局设置User-Agent

我们可以直接在构建客户端时设置全局User-Agent,这样所有请求都会使用相同的标识:

HttpClients.custom().setUserAgent("Mozilla/5.0 Firefox/26.0").build();

完整示例代码如下:

@Test
void whenClientUsesCustomUserAgent_thenCorrect() throws IOException {
    CloseableHttpClient client = HttpClients.custom()
        .setUserAgent("Mozilla/5.0 Firefox/26.0")
        .build();
    final HttpGet request = new HttpGet(SAMPLE_URL);

    String response = client.execute(request, new BasicHttpClientResponseHandler());
    logger.info("Response -> {}", response);
}

优点

  • 一次设置,全局生效
  • 适合需要统一User-Agent的场景

⚠️ 注意

  • 这种方式会覆盖所有请求的User-Agent
  • 后续无法针对特定请求修改

3. 在单个请求上设置User-Agent

如果需要更灵活的控制,可以为每个请求单独设置User-Agent头:

@Test
void whenRequestHasCustomUserAgent_thenCorrect() throws IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    final HttpGet request = new HttpGet(SAMPLE_URL);
    request.setHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 Firefox/26.0");

    String response = client.execute(request, new BasicHttpClientResponseHandler());
    logger.info("Response -> {}", response);
}

优点

  • 每个请求可独立配置
  • 适合需要动态切换User-Agent的场景

缺点

  • 每个请求都需要显式设置
  • 代码重复度可能较高

4. 总结

本文展示了使用Apache HttpClient发送自定义User-Agent请求的两种方式

  1. 全局配置(适合统一场景)
  2. 单请求配置(适合灵活场景)

这些技巧在以下场景特别有用:

  • 模拟浏览器行为
  • 绕过服务器端User-Agent检测
  • API调用时的身份伪装

所有示例代码可在GitHub项目中找到,这是一个基于Eclipse的项目,可以直接导入运行。


原始标题:Custom User-Agent in Apache HttpClient