Сельдерей, механизация и сокс-прокси

Я работаю над проектом, которому необходимо получить доступ к веб-странице с помощью механизма с прокси-сервером 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.

Итак, мой вопрос: есть ли способ установить прокси-носки для механизации, но не затрагивая другие части кода? Я подозреваю, что если я попытаюсь использовать модуль запросов, он также будет использовать прокси-сервер, что не входит в мои намерения. Мне просто нужен прокси для конкретного вызова.


person argaen    schedule 28.05.2015    source источник


Ответы (1)


Я решил это, поставив

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 может подключиться к брокеру (а также повторно подключиться после выхода и повторного запуска).

person argaen    schedule 26.06.2015