如何在cxf客户端中设置https代理?

时间:2016-07-20 19:28:18

标签: web-services https proxy client cxf

我在我的webservice客户端使用以下代码:

HelloService hello = new HelloService();
HelloPortType helloPort = cliente.getHelloPort();
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(helloPort);
HTTPConduit http = (HTTPConduit) client.getConduit();
http.getClient().setProxyServer("proxy");
http.getClient().setProxyServerPort(8080);
http.getProxyAuthorization().setUserName("user proxy");
http.getProxyAuthorization().setPassword("password proxy");

但我的网络服务的最终网址是https网址。此代码似乎仅适用于http url。有没有办法为cxf客户端设置https代理?

2 个答案:

答案 0 :(得分:1)

我没有在文档中看到配置https的方法

试试这个

http.getClient().setProxyServerType (ProxyServerType.SOCKS)

因为HTTP代理(默认cxf值)只能用于处理HTTP流量(请参阅http://www.jguru.com/faq/view.jsp?EID=227532

此外,您需要知道您使用的代理服务器是否支持此协议。要在代理服务器上获取HTTPS连接,需要在代理上使用HTTP CONNECT查询,然后通过代理隧道连接,因此证书验证照常完成,就好像客户端直接与终端服务器通信一样

请参阅HTTPS connections over proxy servers(您也可能像Squid using SSL bump这样的代理服务器

如果SOCKS不起作用,请尝试使用系统属性在jdk级别配置https代理。请参阅javadoc https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html

  System.setProperty("https.proxyHost", host)

  System.setProperty("https.proxyPort", port) //probably 443

还设置http.proxyUser和http.proxyPassword

答案 1 :(得分:0)

好的,所以代理很好。我在策略和代理中设置了连接超时。似乎HTTP CLIENT没有合并属性,因为我们的代码创建了一个新的策略对象来设置超时而不是设置在同一个中。

解决了这个问题,它也适用于https网址。