Можно ли получить страницу https через прокси-сервер аутентификации с помощью urllib2 в Python 2.5? - PullRequest
3 голосов
/ 20 июля 2009

Я пытаюсь добавить поддержку аутентификации прокси к существующему сценарию, так как он подключается к URL-адресу https (с urllib2.Request и urllib2.urlopen), очищает страницу и выполняет некоторые действия в зависимости от того, что у него есть. найденный. Изначально я надеялся, что это будет так же просто, как просто добавить urllib2.ProxyHandler ({"http": MY_PROXY}) в качестве аргумента для urllib2.build_opener, который, в свою очередь, передается в urllib2.install_opener. К сожалению, это не работает при попытке сделать urllib2.Request (ANY_HTTPS_PAGE). Поиск в интернете позволяет мне полагать, что поддержка прокси в urllib2 в python 2.5 не поддерживает https URL. Это удивило меня, если не сказать больше.

Похоже, что решения, плавающие в Интернете, например, http://bugs.python.org/issue1424152 содержит патч для urllib2 и httplib, который предназначен для решения проблемы (когда я попробовал эту проблему, я начал получать вместо этого следующая ошибка: urllib2.URLError: <urlopen error (1, 'error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol')>). Здесь есть рецепт поваренной книги http://code.activestate.com/recipes/456195, который я планирую попробовать дальше. В целом, хотя я удивлен, что это не поддерживается "из коробки", что заставляет меня задуматься, не упускаю ли я очевидные решения, иными словами - есть ли у кого-нибудь простой способ для получения https-страниц использовать аутентифицирующий прокси с urllib2 в Python 2.5? В идеале это будет работать:

import urllib2
#perhaps the dictionary below needs a corresponding "https" entry? 
#That doesn't seem to work out of the box.
proxy_handler = urllib2.ProxyHandler({"http": "http://user:pass@myproxy:port"})
urllib2.install_opener( urllib2.build_opener( urllib2.HTTPHandler, 
                                              urllib2.HTTPSHandler,
                                              proxy_handler ))
request = urllib2.Request(A_HTTPS_URL)
response = urllib2.urlopen( request)
print response.read()

Большое спасибо

1 Ответ

1 голос
/ 20 июля 2009

Вы можете посмотреть на httplib2 . Один из примеров заявляет о поддержке прокси-серверов SOCKS, если установлен модуль socks .

...