Поддерживает ли urllib2 в Python 2.6.1 прокси через https - PullRequest
6 голосов
/ 23 июня 2009

Поддерживает ли 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)?

EDIT: Нет, я тестировал с

   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 [Errno 8] _ssl.c: 480: EOF произошел в нарушение протокола

Ответы [ 3 ]

6 голосов
/ 02 октября 2010

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

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

    Проблема № 1424152: исправление для httplib, urllib2 для поддержки SSL при работе через прокси. Оригинальный патч от Christopher Li, изменения сделаны Senthil Kumaran.

3 голосов
/ 09 декабря 2009

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

3 голосов
/ 23 июня 2009

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

...