java - Java JVM 的 HTTP 代理设置

标签 java proxy jvm fiddler intellij-14

为 Java JVM 6.x 设置 HTTP 代理对我来说不起作用;我希望有人能发现我缺少的东西。

我在 JBOSS 5.1.2 上部署了一个 Java 应用程序,它多次调用外部 Web 服务。我希望能够使用代理拦截这些调用:Fiddler 版本 4.4.8.0。

做了SO search之后我在启动时向 JBOSS VM 参数添加了以下标志:

-DproxySet=true -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8888

我在 IntelliJ 14 中运行 JBOSS。

如果我启动 JBOSS、Fiddler 并在 Chrome 中打开 UI,我可以看到从浏览器到应用程序的流量。我没有看到任何从 JBOSS 对外部服务的调用被拦截。我想除了浏览器对 JBOSS 的调用之外,我还会看到从 JBOSS 对外部服务的所有调用。

更新:

我尝试将这些添加到properties-service.xml中this SO answer - 没有喜悦。

我正在运行 Spring 3,使用 Apache HttpClient 作为我的 Web 服务客户端。我将研究为此配置代理。

最佳答案

感谢 bmargulies 和其他看到此内容的人。我有一个解决方案,希望对其他人有帮助。

-Dhttp.proxyHost 参数添加到我的 JVM 启动选项中没有任何作用。

将这些相同的参数添加到我的部署 properties-services.xml 中的 JBOSS 5.1.2 配置中没有任何作用。

我相信使用 Spring 3.x 是解释这种行为的一个因素。我必须告诉 Spring Web 服务客户端使用代理。

我添加了一些 Spring bean 来连接 Fiddler 代理 HttpClient 并将其注入(inject)到 Web 服务客户端中,替换非代理版本。

我第一次尝试时失败了。我花了一段时间才发现 Apache Commons HttpConfiguration 类不遵循 Java bean 标准,因此 Spring 在尝试连接它时崩溃了。我必须使用 Spring MethodInvokingFactoryBean 来解决这个问题。

这是相关的 Spring 配置 XML:

<!-- New beans for Fiddler proxy -->
<bean id="fiddlerProxyHost" class="org.apache.commons.httpclient.ProxyHost">
    <constructor-arg name="hostname" value="localhost"/>
    <constructor-arg name="port" value="8888"/>
</bean>

<bean id="fiddlerProxyHostConfiguration" class="org.apache.commons.httpclient.HostConfiguration"/>

<bean id="fiddlerProxyHostSetter" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="fiddlerProxyHostConfiguration"/>
    <property name="targetMethod" value="setProxyHost"/>
    <property name="arguments" ref="fiddlerProxyHost"/>
</bean>

<bean id="fiddlerProxyClient" class="org.apache.commons.httpclient.HttpClient">
    <property name="hostConfiguration" ref="fiddlerProxyHostConfiguration"/>
</bean>

现在我可以在 Fiddler 中看到从应用程序到 Web 服务的调用。快乐!

关于java - Java JVM 的 HTTP 代理设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675134/

相关文章:

c++ - 为 DirectX9 使用 C++ 代理 dll,如何旋转场景?

Java HTTP 代理服务器

java - Java 函数的递归版本在第一次调用时比迭代慢,但在调用之后更快。为什么是这样?

java - 如何在灵活的 GAE 应用程序中正确设置 JVM 选项

java - java编译器是JVM的一部分吗?

java - 从文件重定向输入时出错

java - 在java中协调保存在数据库和磁盘中

java - 使用固定大小的数组实现队列

java - 配置 W3C 的 Unicorn 以使用代理服务器

java - 如何在android工具栏中创建带有搜索栏的嵌套 ListView ?