Apache HttpClientBuilder.create()。setUserAgent(...)无效

问题描述 投票:1回答:1

这是我创建HttpClient的方式:

    private String userAgent= "Non empty user agent";
    private HttpClient httpClient= HttpClientBuilder.create()
        .setDefaultCookieStore(new BasicCookieStore())
        .setUserAgent(userAgent)
        .setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build())
        .setDefaultHeaders(Arrays.asList(
                new BasicHeader("Accept-Encoding", "gzip"),
                new BasicHeader("Connection", "keep-alive"))
        )
        .build();

但是在发送请求时,用户代理是,这是日志:

12:51:33.807 [http-nio-5010-exec-9] DEBUG org.apache.http.headers - http-outgoing-0 >> GET / HTTP/1.1
12:51:33.807 [http-nio-5010-exec-9] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept- Encoding: gzip
12:51:33.807 [http-nio-5010-exec-9] DEBUG org.apache.http.headers - http-outgoing-0 >> Host: www.somehost.com
12:51:33.807 [http-nio-5010-exec-9] DEBUG org.apache.http.headers - http-outgoing-0 >> Connection: keep-alive
12:51:33.807 [http-nio-5010-exec-9] DEBUG org.apache.http.headers - http-outgoing-0 >> User-Agent: 

我试图将用户代理设置为默认标头,如下所示:

.setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build())
    .setDefaultHeaders(Arrays.asList(
            new BasicHeader("Accept-Encoding", "gzip"),
            new BasicHeader("Connection", "keep-alive"),
            new BasicHeader("User-Agent", userAgent)
    .build();

但结果相同(用户代理为空)。

这是我发送请求的方式:

        HttpResponse httpResponse = httpClient.execute(new HttpGet(baseUrl));

Http客户端的maven pom依赖项:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.10</version>
    </dependency>
java apache-httpclient-4.x apache-httpcomponents
1个回答
0
投票

问题是在实例化顺序中:实际上我正在使用SpringBoot,并且用户代理值是从属性文件中加载的,是这样的:

 @Value("${com.myapplication.userAgent}")
 private String userAgent;
private HttpClient httpClient= HttpClientBuilder.create()
    .setDefaultCookieStore(new BasicCookieStore())
    .setUserAgent(userAgent)
    .setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build())
    .setDefaultHeaders(Arrays.asList(
            new BasicHeader("Accept-Encoding", "gzip"),
            new BasicHeader("Connection", "keep-alive"))
    )
    .build();

JVM在为userAgent注入值之前实例化了httpClient,因此在实例化httpClient时,userAgent值为null。

感谢您的努力,

© www.soinside.com 2019 - 2024. All rights reserved.