Открыть URL с помощью персонального цифрового сертификата с urllib2 - PullRequest
0 голосов
/ 09 апреля 2011

Я пытаюсь использовать urllib2 для открытия веб-страницы с использованием личного цифрового сертификата.

На самом деле в режиме командной строки, используя "curl -k", можно открыть этот ресурс.

Итак, мой вопрос:

1) Можно ли открыть эту веб-страницу с помощью urllib2, минуя использование личного цифрового сертификата?

2) Если опция (1) невозможна, как получить доступ к этому ресурсу, используя urllib2 и «персональный цифровой сертификат».

P.S. код, который я пытаюсь использовать для доступа к этому ресурсу, следующий:


class HTTPSClientAuthHandler(urllib2.HTTPSHandler):
    def <strong>init</strong>(self, key, cert):
        urllib2.HTTPSHandler.<strong>init</strong>(self)
        self.key = key
        self.cert = cert</p>

<pre><code>def https_open(self, req):
    return self.do_open(self.getConnection, req)

def getConnection(self, host, timeout=300):
    return httplib.HTTPSConnection(host, key_file=self.key, cert_file=self.cert)

opener = urllib2.build_opener (HTTPSClientAuthHandler ('/ Users / antonio / .globus / userkey.pem', '/ Users / antonio / .globus / usercert.pem')) response = opener.open ("https: // ........") напечатать response.read ()

Я получил ошибку:

<code>
Traceback (most recent call last):
  File "HTTPSClientAuthHandler.py", line 18, in 
    response = opener.open("https://cmsweb.cern.ch/tier0/express_config")
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 389, in open
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 502, in http_response
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 427, in error
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 361, in _call_chain
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 510, in http_error_default
urllib2.HTTPError: HTTP Error 500: Internal Server Error

Ответы [ 3 ]

1 голос
/ 11 апреля 2011

наконец-то я решил проблему.

Я получил доступ к службе https, обойдя использование личного цифрового сертификата просто так:

txdata = None
txheaders = {
    'Accept': 'text/html'
}
req = urllib2.Request(url, txdata, txheaders)

Любые идеи, почему заголовки «Принять»«text / html» разрешает подключения к сайтам SSL без сертификатов?

Может быть, это зависит от настроек сервера.

0 голосов
/ 06 февраля 2013

То, что вы хорошо работали для меня, за одним исключением.Инициализация должна иметь двойное __ до и после, поскольку это специальная функция, которая инициализирует класс.Это всегда будет одна и та же функция в каждом классе:

класс HTTPSClientAuthHandler (urllib2.HTTPSHandler): def _ init _ (self, key, cert): urllib2.HTTPSHandler. _ init _ (self) self.key = ключ self.cert = cert

0 голосов
/ 11 апреля 2011

Я не знаком с pycurl, но вот несколько ссылок, которые могут помочь:

проблема при отправке HTTPGET с PyCurl (обратите внимание, в частности, на предложение использовать --libcurl example.c для получения реализации libcurl)

http://code.google.com/p/friendlycurl/

http://www.phpfreaks.com/forums/index.php?topic=270222.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...