使用Socks代理进行HTTP调用

时间:2014-02-06 17:01:49

标签: sockets proxy socks

我想使用socks代理来访问服务器。但有些事情是不对的。我有一个代理,代理的所有者声称它是一个袜子代理。

我简化了我的问题,现在尝试使用以下代码访问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();  

无法与谷歌建立连接。但是如果我使用PROXY类型作为HTTP然后它正在工作,即如果我用

替换上面代码的第4行
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxySocketAddress1);  

我尝试使用浏览器(Chrome)访问google.com并指定与“socks proxy”和“http proxy”相同的代理,然后能够打开谷歌。

不确定给定的代理何时在浏览器中作为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);  

我可以尝试任何建议吗?

1 个答案:

答案 0 :(得分:0)

我猜这个代理不是袜子代理,而是HTTP代理,因为

  • 如果您将其用作http代理,则它可以正常工作,它不能用作袜子代理
  • 如果你在谷歌中指定它作为http AND袜子代理它可能只是使用其他协议(https,ftp ..)的socks代理设置并使用http的http代理设置 - 所以它也作为http代理工作
  • 80xx是http代理的典型端口(例如8000,8001,8080,8081),因为80是"正常" http的端口,袜子代理通常使用类似1080
  • 的东西