Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅在本地主机上忽略http.NoProxyHosts_Java_Http_Proxy_Localhost - Fatal编程技术网

Java 仅在本地主机上忽略http.NoProxyHosts

Java 仅在本地主机上忽略http.NoProxyHosts,java,http,proxy,localhost,Java,Http,Proxy,Localhost,为了调试,我在localhost:2080上运行了一个代理。我可以通过以下任一方式看到trafic通过我的代理: curl http://localhost:8888/stuff --proxy localhost:2080 curl http://some.server.com:8888/stuff --proxy localhost:2080 使用Spring应用程序或裸机,当我调用some.server.com时,我看到请求通过代理,但从来没有在localhost上,即使我将http.n

为了调试,我在localhost:2080上运行了一个代理。我可以通过以下任一方式看到trafic通过我的代理:

curl http://localhost:8888/stuff --proxy localhost:2080
curl http://some.server.com:8888/stuff --proxy localhost:2080
使用Spring应用程序或裸机,当我调用
some.server.com
时,我看到请求通过代理,但从来没有在
localhost
上,即使我将
http.nonProxyHosts
设置为随机值(以避免默认的
localhost

我通过添加以下代码确保考虑了我的JVM参数:

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"));
将生成以下输出:

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
当使用以下JVM参数运行时,为什么对
localhost
的HTTP请求不通过我的代理

  • -Dhttp.proxyHost=localhost
  • -Dhttp.proxyPort=2080
  • -Dhttp.nonProxyHosts=dummy.snafu.com

这是DefaultProxySelector的一个限制,它总是将本地URI(localhost,127.*,等等)附加到您配置为非ProxyHost的任何内容中,基本上绕过了所有本地URI的代理(localhost | 127.*[::1]| 0.0.0 |[::0])。幸运的是,通过创建您自己的代理选择器并将其注册为默认值,可以找到一种解决方法。

您是否在客户端应用程序中检查了
非代理主机的值?是的,谢谢您的询问。在我的问题中添加了相关的代码和输出。我通过实现一个简单的代理选择器(几行代码)使其正常工作,如果您需要示例,请告诉我。这对于fiddler等的本地流量跟踪非常有用。感谢您的帮助,但我最终使用了代理Vole