通过 Java 中的 SOCKS 代理进行 SOAP 调用

Posted

技术标签:

【中文标题】通过 Java 中的 SOCKS 代理进行 SOAP 调用【英文标题】:SOAP calls through a SOCKS Proxy in Java 【发布时间】:2014-10-20 16:28:34 【问题描述】:

我有一种情况,我通过REST 服务与供应商沟通。在我们的组织内有大量的防火墙,做这种事情需要使用特定的SOCKS 代理配置。 注意一定是这个SOCKS代理; HTTP 代理在我们的环境中不起作用。 完成代理配置后,使用以下代码可以相对轻松地处理通过代理的连接:

URL url = new URL("https://url.for.the.web.service.com");
Proxy proxy = new Proxy(Proxy.Type.SOCKS,new InetSocketAddress("our.socks.proxy.server.com",1080));
HttpsURLConnection con = (HttpsURLConnection)url.openConnection(proxy);

我收到了一项附加要求,要求为供应商附加一些附加 Web 服务。不幸的是,这些是对供应商的较旧处理,并且以SOAP 服务的形式完成。 虽然我老了,头发花白了,但这是我第一次在客户端运行SOAP。使用我已经从您的站点获得的帮助(感谢站点 btw;我一直使用它作为参考,包括通过 REST 实现和去年春天的第一轮 SOCKS),我能够得到我的 @987654329 @通过 Eclipse 生成的代理类。但是当我尝试运行生成的代码来访问服务时,我会直接进入防火墙,因为在生成的代码中没有指定它。

我一直在查看它,并且我认为我已经确定了需要进行更改的生成类,即从 Axis 客户端类 Service 扩展的 WSDLName_Locator 类。虽然我可以在生成的代码中找到 WSDL 位置的 URL 对象,但没有等效的连接打开可以附加我的 SOCKS 代理。处理深入到轴处理的内部,我不知道是什么。它也可以在BasicHttpBinding_IWSDLNameStub 中。

我一直在谷歌上搜索并查看生成代码中使用的每个类的 Javadoc,寻找对代理的任何引用,但我一无所获。但这很复杂,因为在 SOAP 白话中,生成的代码本身被称为代理,所以我在尝试的任何搜索中都会收到大量误报,而且所有最新的在线信息似乎都与 android 应用程序开发有关,我没有这样做。 AxisEngine 和 AxisEngineConfiguration 类看起来很有希望,但我也没有找到一种方法来连接代理。

我的需要很简单:在生成的 SOAP 代码中,我可以在何处以及如何对代理进行等效的附加,以便将该链接带入 Axis 处理中?我希望以前有人这样做过。

我没有包含任何生成的代码,因为无论如何我都需要对其进行模糊处理,因为它涵盖了许多服务,所以它很庞大,而且我的假设是生成的输出与一个 WSDL 相似一代到下一代。但我会提供所需的任何其他详细信息。

提前感谢您提供的任何帮助。

【问题讨论】:

【参考方案1】:

我再次尝试谷歌搜索,看看我的问题是否会出现在结果中......是的,就在顶部。但也返回了这个问题的链接:

Call SOAP web-service using Windows proxy settings in Java

在该答案中,显示了将代理值设置为 System 属性的技术,尽管问题与使用另一个类 ProxySelector 有关,我怀疑这就是我的搜索结果为空的原因。我没有尝试过这种技术,因为去年春天我在做 REST 部分时,它不能用于设置 SOCKS 代理。

所以简单地指定:

    System.setProperty("socksProxyHost","our.socks.proxy.server.com");
    System.setProperty("socksProxyPort","1080");

在调用 Web 服务调用之前只需要这样做。

【讨论】:

以上是关于通过 Java 中的 SOCKS 代理进行 SOAP 调用的主要内容,如果未能解决你的问题,请参考以下文章

Java Socks 代理套接字错误

如何正确认识socks5代理ip

怎样通过java使用socks代理访问服务器

无法通过 perl 中的 socks 代理连接到主机

连接到 SOCKS5 代理以在 Java 中执行 FTP/S

java实现socks5代理功能的客户端,模拟浏览器进行HTTP POST提交