2013-04-08 17 views
2

我嘗試使用java加載網站通過代理鏈(多於一個)。 每個請求應該能夠使用另一個鏈。 這裏我第一次快速和骯髒的嘗試:如何通過代理鏈使用java.net.URL/URLConnection

// My proxies and there ports marked with pIP1 pPort1, pIP2 pPort2... 
Socket socket = new Socket(pIP1, pPort1); 
OutputStream out = socket.getOutputStream(); 
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

String connectOverProxy1ToProxy2 = "CONNECT " + pIP2 + ":" + pPort2 + " HTTP/1.1\n\n"; 
String connectHost = "GET http://stackoverflow.com/ HTTP/1.1\n\n"; 

out.write((connectOverProxy1ToProxy2 + connectHost).getBytes()); 
out.flush(); 

String inputLine; 
while ((inputLine = in.readLine()) != null) 
    System.out.println(inputLine); 

out.close(); 
in.close(); 

作爲迴應,我recived這樣的:

HTTP/1.0 200 Connection established 
Proxy-agent: tinyproxy/1.8.3 

HTTP/1.1 200 OK 
Content-Type: text/html; charset=utf-8 
Cache-Control: public, max-age=30 
Expires: Mon, 08 Apr 2013 11:42:08 GMT 
X-Frame-Options: SAMEORIGIN 
Date: Mon, 08 Apr 2013 11:41:36 GMT 
Last-Modified: Mon, 08 Apr 2013 11:41:08 GMT 
Vary: * 
Content-Length: 182825 

<!DOCTYPE html> 
<html> 
[..] 
</html> 

讓我們來到這個問題。 現在我嘗試使用URL/URLConnection加載頁面,以使用java包的完整處理和功能性。有沒有一種方法使用URL/URLConnection與代理鏈而不是單個代理?

感謝您的幫助......

+0

'HttpUrlConnection'類通過使用[代理相關係統設置]支持代理(http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties的.html#代理)。我假設只有一個代理服務器或多個代理服務器並不重要,只要您能夠正確配置第一個代理服務器或多個代理服務器即可。 – mthmulders 2013-04-08 12:15:14

+0

好吧,應該工作,但我需要爲每個請求和許多請求並行建立一個新的鏈的可能性。我解決了這個問題。感謝您的迴應。 – Sebastian 2013-04-08 12:22:54

回答

0

HttpUrlConnection類使用proxy-related system settings支持代理。

但是,您可以通過調用ProxySelector.setDefault()並提供您自己的ProxySelector子類來更改默認代理選擇機制。

通過覆蓋select(URL)方法,您可以返回該URL所需的代理。我首先會嘗試返回鏈中的'第一'代理,然後查看HttpUrlConnection是否自動通過代理鏈。

+0

如果我認爲它正確,ProxySelectorClass持有一組代理並通過執行「select(URI uri)」返回它的一個子列表,但我該如何構建和使用代理鏈? – Sebastian 2013-04-08 12:32:22

+0

查看我編輯的答案。 – mthmulders 2013-04-08 13:38:09

+0

設置修復代理鏈不是解決我的問題。我無法訪問代理設置。假設我的所有代理都是外國公開代理。我必須用請求本身(或在客戶端mashine上)構建完整的代理鏈。希望我明白你的建議是正確的。 – Sebastian 2013-04-08 14:27:31