将HTTP标头“User-Agent”添加到HTTP CONNECT请求

时间:2015-10-06 15:35:21

标签: java http apache-camel apache-httpclient-4.x

先决条件

  • Apache Tomcat 7
  • Spring 3.2.11.RELEASE
  • Apache Camel 2.14.1
  • Camel HTTP4端点(camel-http4)

问题

我尝试通过http4组件调用https加密站点。 位于我的服务器和Internet(目标服务器)之间的代理检查标头“User-Agent”,如果请求为空,则拒绝该请求。

connect-Request不包含http标头“User-Agent”。

在方法private boolean createTunnelToTarget(AuthState proxyAuthState, HttpClientConnection managedConn, HttpRoute route, HttpRequest request, HttpClientContext context) throws HttpException, IOException中的org.apache.http.impl.execchain.MainClientExec中调用以下内容:

    BasicHttpRequest connect = new BasicHttpRequest("CONNECT", authority, request.getProtocolVersion());
    this.requestExecutor.preProcess(connect, this.proxyHttpProcessor, context);

this.requestExecutor.preProcess将标题“Host”和“Proxy-Connection”添加到HTTP CONNECT请求,但不添加“User-Agent”。

如何将标题“User-Agent”添加到HTTP CONNECT请求?

此致

最高

1 个答案:

答案 0 :(得分:2)

httpclient 4.4.1解决了这个问题。

在org.apache.http.impl.client.HttpClientBuilder类中,使用用户代理的HttpRequestInterceptor初始化httpprocessor:

    ClientExecChain execChain = createMainExec(
            requestExecCopy,
            connManagerCopy,
            reuseStrategyCopy,
            keepAliveStrategyCopy,
            new ImmutableHttpProcessor(new RequestTargetHost(), new RequestUserAgent(userAgentCopy)),
            targetAuthStrategyCopy,
            proxyAuthStrategyCopy,
            userTokenHandlerCopy);

解决方案是将httpclient版本从4.3.3更新到4.4.1。 在maven中,我必须定义依赖关系,以便不选择骆驼使用的版本。