PyCurl попробовал метод аутентификации нескольких прокси не удалось с "соединение отказано" - PullRequest
0 голосов
/ 25 сентября 2019

При попытке использовать PyCurl (последняя версия с Python2.7) для тестирования нескольких методов аутентификации один за другим, он отправляет только первые 2 соединения, а затем завершается неудачно, даже не пытаясь соединиться, при использовании Wireshark для просмотра запроса CONNECT Iможет видеть только первые 2.

Это небольшой пример кода для воспроизведения этого сценария:

import pycurl

AUTH_ALL_METHODS = [
    pycurl.HTTPAUTH_NTLM,
    pycurl.HTTPAUTH_NEGOTIATE,
    pycurl.HTTPAUTH_DIGEST,
    pycurl.HTTPAUTH_DIGEST_IE,
    pycurl.HTTPAUTH_BASIC,
]

curl = pycurl.Curl()
curl.setopt(pycurl.URL, "https://www.google.com")
curl.setopt(pycurl.PROXY, "http://52.31.232.220:3128")

curl.setopt(pycurl.PROXYUSERPWD, "safebreach:safebreach")

for auth in AUTH_ALL_METHODS:
    curl.setopt(pycurl.PROXYAUTH, auth)
    try:
        curl.perform()
    except Exception as e:
        print e, auth

curl.close()

При добавлении time.sleep(5) в исключении все работает, как должно, и всезапросы присутствуют в Wireshark.

Я предполагаю, что существует некоторое внутреннее состояние PyCurl, которое необходимо сбросить, но я не мог понять это, даже создавая новый экземпляр pycurl.Curl() для каждой попытки, которую я получаюрезультаты.

ОБНОВЛЕНИЕ

После дальнейшего изучения этого кажется, что, когда ошибка:

Proxy CONNECT aborted

, которую я получаю с первого разаpycurl.HTTPAUTH_NTLM следующие вызовы не выполняются с ошибкой:

Failed to connect to xx.xx.xx.xx port xxxx: Connection refused

Протестирован тот же сценарий с curl, и он ведет себя так же:

curl --proxy-ntlm -XGET -x http://xx.xx.xx.xx:xxxx -U username:password https://www.google.com
curl -XGET -x http://xx.xx.xx.xx:xxxx -U username:password https://www.google.com

Вывод:

curl: (56) Proxy CONNECT aborted
curl: (7) Failed to connect to xx.xx.xx.xx port xxxx: Connection refused

Есть ли способ преодолеть это?

...