通过 Python 通过 Shadowsocks 代理旋转

Rotate through Shadowsocks proxy via Python

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

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

谢谢!

如果你看一下 urllib2 的 source,你会发现当安装了一个默认的 opener 时,它实际上只需要一个带有 open 方法的对象。所以你真的只需要创建一个对象,其 open 方法 returns 是一个随机的开场白。像下面这样的东西(未经测试)应该可以工作:

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)