使用urllib2和SOCKS代理

Flu*_*ffy 14 python urllib2 socks

是否可以在每个开启者基础上通过一个袜子服务器上的SOCKS代理获取urllib2的页面?我已经看过使用setdefaultproxy方法的解决方案,但我需要在不同的开启者中使用不同的袜子.

所以有SocksiPy库,它工作得很好,但它必须以这种方式使用:

import socks
import socket
socket.socket = socks.socksocket
import urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "x.x.x.x", y)
Run Code Online (Sandbox Code Playgroud)

也就是说,它为所有urllib2请求设置相同的代理.如何为不同的开启者设置不同的代理?

sys*_*out 16

尝试使用pycurl:

import pycurl
c1 = pycurl.Curl()
c1.setopt(pycurl.URL, 'http://www.google.com')
c1.setopt(pycurl.PROXY, 'localhost')
c1.setopt(pycurl.PROXYPORT, 8080)
c1.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)

c2 = pycurl.Curl()
c2.setopt(pycurl.URL, 'http://www.yahoo.com')
c2.setopt(pycurl.PROXY, 'localhost')
c2.setopt(pycurl.PROXYPORT, 8081)
c2.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)

c1.perform() 
c2.perform() 
Run Code Online (Sandbox Code Playgroud)


sw.*_*sw. 11

是的你可以.我重复我的答案我如何使用urllib2的SOCKS 4/5代理? 您需要为每个代理创建一个开启器,就像使用http代理一样.将此功能添加到SocksiPy的代码可以在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)

有关更多信息,我编写了一个运行多个Tor实例的示例,其行为类似于旋转代理:具有多个Tor电路的分布式Scraping