我試圖找到一種方法來強制Jar通過我的代理服務器(在本地主機上運行)(也是Java應用程序)對外部IP進行的任何連接嘗試。 一旦代理服務器接收到連接,它將打開與外部IP的連接並開始將IO與客戶機/服務器進行路由。啓動選項以強制Java套接字連接到本地主機?
我一直在谷歌搜索這2天,我沒有任何運氣,我相信我在我的搜索嘗試中使用錯誤的條款。
如果您有任何想法,請讓我知道,我會嘗試任何。
在此先感謝。 - 肖恩。
我試圖找到一種方法來強制Jar通過我的代理服務器(在本地主機上運行)(也是Java應用程序)對外部IP進行的任何連接嘗試。 一旦代理服務器接收到連接,它將打開與外部IP的連接並開始將IO與客戶機/服務器進行路由。啓動選項以強制Java套接字連接到本地主機?
我一直在谷歌搜索這2天,我沒有任何運氣,我相信我在我的搜索嘗試中使用錯誤的條款。
如果您有任何想法,請讓我知道,我會嘗試任何。
在此先感謝。 - 肖恩。
如果它是HTTP流量或FTP流量,你可以試試下面的系統屬性:
http.proxyHost(默認) 把http.proxyPort(默認值:80如果http.proxyHost指定) http.nonProxyHosts(默認:
請參閱此鏈接的詳細信息:
http://java.sun.com/docs/books/tutorial/networking/urls/_setProxy.html
如果是一個「真正的」代理的,你可以指定代理使用JA使用VA系統屬性。
你有兩種選擇:
那麼你實際上有三個
從命令行您將使用:
java -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -jar YourJar.jar
隨着所有的HTTP連接執行將通過localhost
在端口8080
二是在main方法添加此你的程序:
public static void main(String [] args) {
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8080");
.....
}
這是一樣的。
從myapp.properties
public static void main(String [] args) {
try { // there are cleaner ways of course
ResorceBundle bundle = ResourceBundle.getBundle("myapp");
System.setProperty("http.proxyHost", bundle.getString("proxy.server"));
System.setProperty("http.proxyPort", bundle.getString("proxy.port"));
} catch(MissingResourceException missingResourceException){}
....
}
最後加載你只需要確保myapp.properties
可從classpath
有關此功能的更多信息here
如果你問一般(NOT HTTP/FTP特定!)代理Socket連接,那麼簡單的答案是它不被Java支持。
當您爲HTTP和FTP流量配置代理時,代理髮生在應用程序協議級別。 Java端代理屬性告訴URLConnection層連接到您指定的代理,而不是您應用程序試圖連接到的URL的IP地址。 Java Socket級別不知道發生了這種情況。它只是看到連接到代理的請求。
這項工作是因爲HTTP和FTP協議專門支持代理。例如,HTTP GET請求消息的第一行'給出了客戶端請求的頁面的完整URL。如果GET請求進入代理,代理可以找出需要發送的地址。
從Socket級別的代理問題來看,第一個觀察結果是標準Java類庫不支持這一點。第二個觀察結果是,它實際上是無法實現的......除非你將它作爲一個替代傳輸層實現。原因是IP和TCP/IP根本不支持顯式代理或中繼消息/流的概念。即使你實現了這種傳輸,它也不適合標準的Socket模型。
所以,如果你是真的詢問大約代理Java應用程序的網絡流量都,這隻能在JVM之外執行;即在JVM(物理或虛擬)主機操作系統的網絡傳輸級別上。
我不完全同意這一點。自Java 1.5以來,內置對SOCKS代理的支持(請參閱'java.net.Socket(代理代理)'的構造函數)。但是,是的,對於HTTP協議,需要一些額外的層來處理它。 Apache'commons-httpclient'開發人員承諾在4.x版本的庫中添加此支持(請參閱http://wiki.apache.org/HttpComponents/FrequentlyAskedApplicationDesignQuestions#Proxy_Configuration)。 – 2010-03-04 20:05:07
並且...是...有完整的代理支持(至少在Java 6中以及HTTP和FTP)。參見'sun.net.www.protocol.ftp.FtpURLConnection#connect()'和'sun.net.www.protocol.http.HttpURLConnection#plainConnect()'。另外支持身份驗證。 – 2010-03-04 20:12:51
同樣在這裏討論:http://stackoverflow.com/questions/1432961/how-do-i-make-httpurlconnection-use-a-proxy – 2010-03-04 20:14:27