In Python 3.2, ich kann Sie öffnen und Lesen Sie eine HTTPS-Webseite mit http.client, aber das urllib.Anfrage nicht öffnen derselben Seite

Möchte ich öffnen und Lesen https://yande.re/ mit urllib.request, aber ich bin immer ein " SSL-Fehler. Ich kann Sie öffnen und Lesen Sie die Seite einfach gut mit http.client mit diesem code:

import http.client

conn = http.client.HTTPSConnection('www.yande.re')
conn.request('GET', 'https://yande.re/')
resp = conn.getresponse()
data = resp.read()

Jedoch, den folgenden code verwenden urllib.request ausfällt:

import urllib.request

opener = urllib.request.build_opener()
resp = opener.open('https://yande.re/')
data = resp.read()

Es gibt mir die folgende Fehlermeldung: ssl.SSLError: [Errno 1] _ssl.c:392: error:1411809D:SSL routines:SSL_CHECK_SERVERHELLO_TLSEXT:tls invalid ecpointformat list. Warum kann ich die Seite mit HTTPSConnection aber nicht geöffnet.öffnen?

Edit: Hier ist meine OpenSSL-version und die Rückverfolgung von versuchen, Sie zu öffnen https://yande.re/

>>> import ssl; ssl.OPENSSL_VERSION
'OpenSSL 1.0.0a 1 Jun 2010'
>>> import urllib.request
>>> urllib.request.urlopen('https://yande.re/')
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    urllib.request.urlopen('https://yande.re/')
  File "C:\Python32\lib\urllib\request.py", line 138, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python32\lib\urllib\request.py", line 369, in open
    response = self._open(req, data)
  File "C:\Python32\lib\urllib\request.py", line 387, in _open
    '_open', req)
  File "C:\Python32\lib\urllib\request.py", line 347, in _call_chain
    result = func(*args)
  File "C:\Python32\lib\urllib\request.py", line 1171, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\Python32\lib\urllib\request.py", line 1138, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 1] _ssl.c:392: error:1411809D:SSL routines:SSL_CHECK_SERVERHELLO_TLSEXT:tls invalid ecpointformat list>
>>> 
  • Können Sie fügen Sie die Ausgabe von import ssl; ssl.OPENSSL_VERSION, und das Ergebnis urllib.request.urlopen('https://yande.re/')
  • FWIW, wahrscheinlich ein Datenpunkt für die Fehlersuche. Das äquivalent in Python 2.7.x-code (siehe unten) gut funktioniert : import urllib2 req = urllib2.Request('yande.re') bzw = urllib2.urlopen(req) resp.read()
  • code für http.client ist falsch. Sie könnte bedeuten: conn.request('GET', '/')
InformationsquelleAutor user1406902 | 2012-05-21
Schreibe einen Kommentar