我一直在尝试使用Apache Camel的Http4组件连接到需要基本身份验证的HTTPS URL。连接需要通过经过身份验证的HTTP代理完成。
所以,根据docs,我像这样配置Camel端点:
.toD("https4://target.host/resource?
bridgeEndpoint=true
&mapHttpMessageBody=false
&proxyAuthHost=my.proxy.host
&proxyAuthPort=myProxyPort
&proxyAuthUsername=proxyUser
&proxyAuthPassword=proxyPassword
&proxyAuthScheme=http4
&authenticationPreemptive=true
&authUsername=myUser
&authPassword=myPassword")
这会导致目标服务器发出403 - Forbidden
响应。查看org.apache.http.wire
日志,它显示代理凭据 proxyUser / proxyPassword 被转发到目标服务器而不是目标 myUser / myPassword 。
调试CompositeHTTPConfigurer.configureHttpClient
,ProxyHttpClientConfigurer.configureHttpClient
和BasicAuthenticationHttpClientConfigurer.configureHttpClient
的来源,似乎是因为两个配置器都通过Authorization
将凭据设置为HttpClientBuilder
,其中一个丢失 - 被覆盖 - 在此过程中。
看起来它可能是Camel的Http4组件中的一个错误?或者我错过了什么?
这是带有Spring Boot 1.5.1.RELEASE的Camel 2.18.2。
答案 0 :(得分:1)
在Apache Camel Users list上提出这个问题后,似乎确认了这个错误。
我使用camel-http
代替camel-http4
解决了问题。端点参数需要略微调整:
.toD("https://target.host/resource?
bridgeEndpoint=true
&proxyHost=my.proxy.host
&proxyPort=myProxyPort
&proxyAuthUsername=proxyUser
&proxyAuthPassword=proxyPassword
&proxyAuthMethod=Basic
&authUsername=myUser
&authPassword=myPassword
&authMethod=Basic
&httpClient.authenticationPreemptive=true")