我如何使用SOCKS 4/5代理与urllib2?
我怎么才能用SOCKS 4/5代理通过urllib2下载一个网页呢?
3 个回答
4
因为SOCKS是一种在套接字层工作的代理,所以你需要替换掉urllib2
使用的套接字对象。你可以看看这个解决方案。如果猴子补丁(monkey patching)对你来说不够好,那你可以尝试从urllib2
的标准库中继承或者修改代码。
21
这里提供一个补充的方案,适合需要同时使用多个代理的情况。
在这种情况下,你需要像使用http代理那样创建一个“打开器”。在GitHub上有相关的代码可以参考,链接是 https://gist.github.com/869791
opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS4, 'localhost', 9999))
print opener.open('http://www.whatismyip.com/automation/n09230945.asp').read()
68
你可以使用 SocksiPy 这个模块。只需要把 "socks.py" 文件复制到你的 Python 的 lib/site-packages 目录下,就可以开始使用了。
在使用 urllib2 之前,你必须先使用 socks。你可以试试这个命令 pip install PySocks
。
比如说:
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8080)
socket.socket = socks.socksocket
import urllib2
print urllib2.urlopen('http://www.google.com').read()
你也可以尝试使用 pycurl 库和 tsocks,想了解更多信息,可以点击 这里。