如何使用带urllib2的SOCKS 4/5代理下载网页?
示例代码:
#!/usr/bin/python
import socks
import socket
import urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4, "127.0.0.1", 9050, True)
socket.socket = socks.socksocket
print urllib2.urlopen("http://almien.co.uk/m/tools/net/ip/").read()
Run Code Online (Sandbox Code Playgroud)
TOR在端口9050上运行SOCKS代理(默认值).该请求通过TOR,在我自己以外的IP地址上显示.但是,TOR控制台会发出警告:
"2月28日22:44:26.233 [警告]你的应用程序(使用socks4到端口80)只给Tor一个IP地址.做DNS解析的应用程序本身可能泄漏信息.考虑使用Socks4A(例如通过privoxy或socat).有关详细信息,请参阅 https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS."
即DNS查找不通过代理.但这就是setdefaultproxy应该做的第4个参数,对吧?
来自http://socksipy.sourceforge.net/readme.txt:
setproxy(proxytype,addr [,port [,rdns [,username [,password]]]])
rdns - 这是一个布尔标志,而不是修改DNS解析的行为.如果设置为True,则将在服务器上远程执行DNS解析.
选择PROXY_TYPE_SOCKS4和PROXY_TYPE_SOCKS5时效果相同.
它不能是本地DNS缓存(如果urllib2甚至支持它),因为当我将URL更改为此计算机以前从未访问过的域时会发生这种情况.