通过Python旋转Shadowsocks代理

时间:2015-08-11 01:13:32

标签: python proxy urllib2

我有一个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上的任何内容而不是主动建立连接。

我只是想知道是否有人可以帮助我在代码中完成此任务。

谢谢!

1 个答案:

答案 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)