【问题标题】:how to set https proxy in cxf client ?如何在 cxf 客户端中设置 https 代理?
【发布时间】:2016-07-20 19:28:18
【问题描述】:

我正在为我的网络服务客户端使用以下代码:

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");

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

【问题讨论】:

    标签: web-services https proxy client cxf


    【解决方案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 代理。见javadochttps://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

    【讨论】:

    • 感谢您的回答。我们不能使用系统级代理设置,因为有来自同一个 jvm 的多个连接,我们只需要为其中 1 个连接使用代理。
    • 您是否检查过您的代理是否能够绕过 https 流量?
    【解决方案2】:

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

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

    【讨论】:

    • 你能更新你的解决方案吗?当我尝试使用 wsdl over htpps 连接到 htpps 代理服务器时,我遇到了类似的问题。
    • 我必须为 HTTPS 代理添加证书。
    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多