我正在使用Apache Camel 2.13.1作为使用http4组件的HTTP代理:
.from("servlet://*?matchOnUriPrefix=true")
.to("http4://example.com/?bridgeEndpoint=true&httpClient.redirectsEnabled=false")
现在我需要将传出代理请求的 Host
HTTP头参数设置到后端系统,因为代理应用程序使用它来生成绝对链接,它必须匹配public / frontend url . 使用简单地在camel消息中设置 Host
标头的简单方法 .setHeader("Host", "foo.com")
失败,因为http4组件使用代理主机example.com的主机名覆盖它 .
进一步的研究表明,HTTPClient曾经通过虚拟主机参数来做到这一点 . Camel的http4组件使用 httpClient
param支持直通HTTPClient参数 . 但是从版本2.13.0开始,camel http4使用HTTPClient 4.3的构建器api(http://camel.apache.org/http4.html)从 endpoints 配置传递httpClient . * params,遗憾的是HTTPClient 4.3的构建器api不再包含虚拟主机参数 . 通过这个HTTPClient邮件列表回复(https://mail-archives.apache.org/mod_mbox//hc-httpclient-users/201312.mbox/%3C1387792931.6163.17.camel@ubuntu%3E)来判断,我可能必须通过setTargetHost在HttpClientContext上设置虚拟主机,它似乎被称为目标主机 . 我怎么能通过骆驼来做到这一点?
So to sum up: 我正在使用camel的http4组件,需要更改传出代理请求的 Host
HTTP标头值 .
2 回答
您可以使用这样的httpContext选项设置HttpContext实例 . 请确保HttpContext实例与Registry中的“customerContext”绑定 .
点此帖子Configuring Apache HttpClient to access service through proxy/load-balancer (overriding Host header)
这个片段对我有用: