Поддерживает ли urllib2 в Python 2.6.1 прокси через https

StackOverflow https://stackoverflow.com/questions/1030113

  •  06-07-2019
  •  | 
  •  

Вопрос

Делает urllib2 в Python 2.6.1 поддерживается прокси через https?

Я нашел следующее по адресу http://www.voidspace.org.uk/python/articles/urllib2.shtml:

ПРИМЕЧАНИЕ

В настоящее время urllib2 не поддерживает выборку местоположений https через прокси.Это может стать проблемой.

Я пытаюсь автоматизировать вход на веб-сайт и загрузку документа, у меня есть действительное имя пользователя / пароль.

proxy_info = {
    'host':"axxx", # commented out the real data
    'port':"1234"  # commented out the real data
}

proxy_handler = urllib2.ProxyHandler(
                 {"http" : "http://%(host)s:%(port)s" % proxy_info})
opener = urllib2.build_opener(proxy_handler,
         urllib2.HTTPHandler(debuglevel=1),urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)

fullurl = 'https://correct.url.to.login.page.com/user=a&pswd=b' # example
req1 = urllib2.Request(url=fullurl, headers=headers)
response = urllib2.urlopen(req1)

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

Мне нужно пройти аутентификацию, но не используя базовую аутентификацию, будет ли urllib2 определять аутентификацию при переходе через сайт https (я указываю имя пользователя / пароль для сайта через URL)?

Редактировать:Нет, я тестировал с помощью

   proxies = {
        "http" : "http://%(host)s:%(port)s" % proxy_info,
        "https" : "https://%(host)s:%(port)s" % proxy_info
    }

    proxy_handler = urllib2.ProxyHandler(proxies)

И я получаю сообщение об ошибке:

urllib2.URLError:ошибка urlopen [Ошибка № 8] _ssl.c:480:EOF произошел при нарушении протокола

Это было полезно?

Решение

Я не уверен, что статья Майкла Фурда, которую вы цитируете, обновлена до Python 2.6.1 - почему бы не попробовать?Вместо того, чтобы сообщать ProxyHandler, что прокси-сервер подходит только для http, как вы делаете сейчас, зарегистрируйте его и для https (конечно, вы должны отформатировать его в переменную только один раз, прежде чем вызывать ProxyHandler, и просто повторно использовать эту переменную в dict):это может сработать, а может и не сработать, но вы даже не пытаясь, и это конечно не для того, чтобы работать!-)

Другие советы

Исправлено в Python 2.6.3 и некоторых других ветках:

  • _bugs.python.org/issue1424152 (замените _ на http...)
  • http://www.python.org/download/releases/2.6.3/NEWS.txt

    Проблема № 1424152:Исправлено для httplib, urllib2 для поддержки SSL при работе через прокси.Оригинальный патч Кристофера Ли, изменения внесены Сентилом Кумараном.

Если у кого-то еще возникнет эта проблема в будущем, я хотел бы отметить, что сейчас он поддерживает прокси-сервер https, убедитесь, что прокси-сервер тоже поддерживает его, иначе вы рискуете столкнуться с ошибкой, которая помещает библиотеку Python в бесконечный цикл (это произошло мне).

Дополнительную информацию см. в unittest в исходном коде Python, который тестирует поддержку https-прокси:http://svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top