如何在urllib2中使用SOCKS 4/5代理?

Mik*_*ike 48 python proxy urllib2 socks

如何使用带urllib2的SOCKS 4/5代理下载网页?

小智 67

您可以使用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()
Run Code Online (Sandbox Code Playgroud)

您还可以尝试pycurl lib和tsocks,有关更多详细信息,请单击此处.

  • 其中一个问题是:urllib的DNS查找似乎没有通过代理.(即使使用rdns选项和SOCKS4类型) (4认同)
  • 只是想注意sourceforge上的sockipy有一些讨厌的错误.在最低限度地使用叉子在这里:code.google.com/p/socksipy-branch由于该项目似乎抛弃IMO有人要采取的分支,更改名称,写一个博客帖子这样的人不要继续使用该越野车(和国际海事组织并不奇妙的写)lib. (4认同)
  • @OJW还有另一个答案http://stackoverflow.com/a/13214222/288875这也使主机名查找超过SOCKS代理 (2认同)

sw.*_*sw. 21

当您需要同时使用许多不同的代理时,添加pan的答案的替代方案.

在这种情况下,您需要像使用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()
Run Code Online (Sandbox Code Playgroud)