gpt4 book ai didi

java - http.nonProxyHosts 仅在本地主机上被忽略

转载 作者:可可西里 更新时间:2023-11-01 16:32:04 28 4
gpt4 key购买 nike

出于调试目的,我在 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 上,即使我设置了 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 的限制,它总是将本地 Uris(localhost, 127.*, etc) 附加到您配置为非 ProxyHosts 的任何内容,基本上绕过所有本地 Uris(localhost|127.*|[::1] 的代理|0.0.0.0|[::0])。幸运的是,有一个解决方法,即创建您自己的代理选择器并将其注册为默认值。

关于java - http.nonProxyHosts 仅在本地主机上被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733557/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com