http.nonProxyHosts仅在localhost上被忽略

时间:2017-10-13 15:44:09

标签: java http proxy localhost

我在localhost:2080上运行代理以进行调试。我可以使用以下任一方式查看通过我的代理的流量:

curl http://localhost:8888/stuff --proxy localhost:2080
curl http://some.server.com:8888/stuff --proxy localhost:2080

使用Spring应用程序或简单的HttpURLConnectionExample Java application,我看到请求在我调用some.server.com时通过代理,但从未在localhost上,即使我设置{{1}随机值(以避免默认值为http.nonProxyHosts)。

我通过添加以下代码确保我的JVM参数被记入帐户:

localhost

产生以下输出:

System.out.println("java.version="+props.getProperty("java.version"));
System.out.println("http.proxyHost="+props.getProperty("http.proxyHost"));
System.out.println("http.proxyPort="+props.getProperty("http.proxyPort"));
System.out.println("http.nonProxyHosts="+props.getProperty("http.nonProxyHosts"));

为什么在使用以下JVM参数运行时,java.version=1.8.0_131 http.proxyHost=localhost http.proxyPort=2080 http.nonProxyHosts=dummy.snafu.com https.proxyHost=localhost https.proxyPort=2080 https.nonProxyHost=dummy.snafu.com Testing 1 - Send Http GET request Sending 'GET' request to URL : http://localhost:8888/stuff Response Code : 200 hello 的HTTP请求不通过我的代理?

  • localhost
  • -Dhttp.proxyHost=localhost
  • -Dhttp.proxyPort=2080

1 个答案:

答案 0 :(得分:2)

这是DefaultProxySelector的限制,它总是将本地Uris(localhost,127。*等)附加到你配置为nonProxyHosts的任何内容,基本上绕过所有本地Uris的代理(localhost | 127。* | [:: 1] | 0.0.0.0 | [:: 0])。幸运的是,有一种解决方法是创建自己的代理选择器并将其注册为默认值。