2014-02-06 95 views
0

我想使用socks代理來訪問服務器。但有些事情是不對的。我有一個代理,代理的所有者聲稱它是一個襪子代理。使用Socks代理進行HTTP調用

我簡化了我的問題,現在嘗試使用下面的代碼訪問google.com。

URL url = new URL("https://www.google.com"); 
URLConnection connection = null; 
SocketAddress proxySocketAddress1 = new InetSocketAddress("XXXXXXXXXX", 8081); 
Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxySocketAddress1); 
connection = url.openConnection(proxy); 
connection.setConnectTimeout(150000); 
connection.connect(); 

無法用Google建立連接。但是,如果使用PROXY類型爲HTTP,則工作,如果我替換上面的代碼的第4行與

Proxy proxy = new Proxy(Proxy.Type.HTTP, proxySocketAddress1); 

即我嘗試使用瀏覽器(鉻),並指定相同的代理爲「襪子到達google.com代理「和」http代理「,並能夠打開谷歌之後。

不知道當給定的代理在瀏覽器中作爲SOCKS代理工作時,爲什麼它不能在代碼中工作?

如果我得到這個工作,然後最終我想要做的事,如:

SocketAddress socketAddress = new InetSocketAddress(proxyHostname,proxyPort); 
Proxy socketProxy = new Proxy(Proxy.Type.SOCKS, socketAddress); 
socket = new Socket(socketProxy); 

InetSocketAddress socketAddress = new InetSocketAddress(hostIP,hostPort);  
socket.connect(socketAddress,100000); 

任何建議我可以試試嗎?

回答

0

我想這個代理不是SOCKS代理,但HTTP代理,因爲

  • ,如果你把它作爲一個HTTP代理工作,它不是作爲一個SOCKS代理
  • 如果指定工作它在谷歌作爲HTTP和襪子代理,它可能只是使用其他協議(https,ftp ..)的襪子代理設置,並使用http代理設置 - 所以它也可以在那裏工作,因爲http代理
  • 80xx是典型的http代理的端口(例如8000,8001,8080,8081),因爲80是http的「普通」端口,而代理服務器通常使用類似1080
+0

其實它是一個SOCKS4代理。當我試圖連接通過SOCKS4,然後我能夠達到谷歌通過代碼。 – user3280587

+0

然後奇怪的是,java應用程序可以使用它作爲HTTP代理,但不能作爲SOCKS代理。也許你應該做一個tcpdump來看看真正發生了什麼。 –