我有一个python代码,需要使用我设置的各种ShadowSocks代理服务器才能使用这些服务器的IP。
比如说我想用:
1.1.1.1:5678
2.2.2.2:5678
3.3.3.3:5678
,即所有这些服务器都有相同的远程端口,本地端口都是1080。
我的首选是让3个代理随机旋转,这样每次我发送urlopen()请求(在urllib2中),我的代码随机连接到其中一个代理并通过该代理发送请求,并在请求已完成。
IP可以是硬编码的,也可以存储在某些配置文件中。
目前的问题是,我发现的所有在线样本似乎都需要预先建立连接,而Python代码应该只使用localhost:1080上的任何内容而不是主动建立连接。
我只是想知道是否有人可以帮助我在代码中完成此任务。
谢谢!
答案 0 :(得分:1)
如果你看一下urllib2的source,你可以看到,当安装了一个默认的开启工具时,它实际上只需要一个带有open
方法的对象。所以你真的只需要创建一个open
方法返回一个随机开启器的对象。以下(未经测试)应该有效:
import urllib2
import random
class RandomOpener(object):
def __init__(self, ip_list)
self.ip_list = ip_list
def open(self, *args, **kwargs):
proxy = random.choice(self.ip_list)
handler = urllib2.ProxyHandler({'http': 'http://' + proxy})
opener = urllib2.build_opener(handler)
return opener(*args, **kwargs)
my_opener = RandomOpener(['1.1.1.1:5678',
'2.2.2.2:5678',
'3.3.3.3:5678'])
urllib2.install_opener(my_opener)