2017-10-13 874 views
1

我在localhost:2080上運行代理以進行調試。我可以看到TRAFIC經歷我的代理使用兩種:http.nonProxyHosts僅在本地主機上被忽略

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 

爲什麼HTTP請求localhost通過不會我使用以下JVM參數運行時的代理?

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

您是否從客戶端應用程序中檢查了'nonProxyHosts'的值? – Malt

+0

是的,謝謝你的提問。添加了相關的代碼和輸出到我的問題。 – ixe013

回答

1

這是DefaultProxySelector的限制,它總是附加本地尤里斯(本地主機,127 *等),以任何你配置爲nonProxyHosts,本質繞過所有本地Uris的代理(localhost | 127。* | [:: 1] | 0.0.0.0 | [:: 0])。幸運的是,通過創建您自己的代理選擇器並將其註冊爲默認選項來解決問題。

+0

我通過實現一個簡單的代理選擇器(幾行代碼)使其工作,讓我知道你是否需要樣本。這對於本地流量追蹤由提琴手等有用 – hmble

+0

感謝您的報價,但我最終使用代理-Vole https://github.com/MarkusBernhardt/proxyvvole – ixe013