芹菜、机械化和袜子代理
Celery, mechanize and socks proxy
我正在开展一个项目,该项目需要使用 mechanize 和 socks 代理来访问网页。经过一番挖掘,我想出了以下代码:
def create_connection(address, timeout=None, source_address=None):
sock = socks.socksocket()
sock.connect(address)
return sock
CRAWLER_SOCKS_PROXY_HOST = '0.0.0.0'
CRAWLER_SOCKS_PROXY_PORT = 1080
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, CRAWLER_SOCKS_PROXY_HOST, CRAWLER_SOCKS_PROXY_PORT)
socket.socket = socks.socksocket
socket.create_connection = create_connection
这确实允许我使用我用 ssh -f -N -D 1080 user@host
创建的代理袜子访问网页。
这样做之后,我意识到 Celery 无法连接到我的 Redis 代理并给出 Connection closed unexpectedly
错误,所以我终止了 ssh 进程并确认代理 socks 配置是罪魁祸首。得到的错误是:Cannot connect to redis://127.0.0.1:6379//: Error connecting to SOCKS5 proxy 0.0.0.0:1080: [Errno 111] Connection refused.
所以,我的问题是:有没有办法在不影响代码其他部分的情况下为 mechanize 设置代理袜子?我怀疑如果我尝试使用请求模块,它也会使用代理,这不是我的本意。我只想要特定呼叫的代理。
我把
CRAWLER_SOCKS_PROXY_HOST = '0.0.0.0'
CRAWLER_SOCKS_PROXY_PORT = 1080
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, CRAWLER_SOCKS_PROXY_HOST, CRAWLER_SOCKS_PROXY_PORT)
socket.socket = socks.socksocket
socket.create_connection = create_connection
函数调用内的行(我需要使用代理袜子进行调用)而不是在模块的全局范围内。这种方式似乎 Celery 可以连接到代理(并且在退出并再次启动后也可以重新连接)。
我正在开展一个项目,该项目需要使用 mechanize 和 socks 代理来访问网页。经过一番挖掘,我想出了以下代码:
def create_connection(address, timeout=None, source_address=None):
sock = socks.socksocket()
sock.connect(address)
return sock
CRAWLER_SOCKS_PROXY_HOST = '0.0.0.0'
CRAWLER_SOCKS_PROXY_PORT = 1080
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, CRAWLER_SOCKS_PROXY_HOST, CRAWLER_SOCKS_PROXY_PORT)
socket.socket = socks.socksocket
socket.create_connection = create_connection
这确实允许我使用我用 ssh -f -N -D 1080 user@host
创建的代理袜子访问网页。
这样做之后,我意识到 Celery 无法连接到我的 Redis 代理并给出 Connection closed unexpectedly
错误,所以我终止了 ssh 进程并确认代理 socks 配置是罪魁祸首。得到的错误是:Cannot connect to redis://127.0.0.1:6379//: Error connecting to SOCKS5 proxy 0.0.0.0:1080: [Errno 111] Connection refused.
所以,我的问题是:有没有办法在不影响代码其他部分的情况下为 mechanize 设置代理袜子?我怀疑如果我尝试使用请求模块,它也会使用代理,这不是我的本意。我只想要特定呼叫的代理。
我把
CRAWLER_SOCKS_PROXY_HOST = '0.0.0.0'
CRAWLER_SOCKS_PROXY_PORT = 1080
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, CRAWLER_SOCKS_PROXY_HOST, CRAWLER_SOCKS_PROXY_PORT)
socket.socket = socks.socksocket
socket.create_connection = create_connection
函数调用内的行(我需要使用代理袜子进行调用)而不是在模块的全局范围内。这种方式似乎 Celery 可以连接到代理(并且在退出并再次启动后也可以重新连接)。