2016-04-05 4 views
1
import requests 

spiders = requests.get('https://en.wikipedia.org/w/api.php') 
print(spiders) 

Mit obigem Code ich folgende Störung erhalte:kann nicht wikipedia API für den Zugriff auf durch SSL-Zertifikat Fehler

Traceback (most recent call last): 
    File "C:\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 554, in urlopen 
    self._prepare_proxy(conn) 
    File "C:\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 750, in _prepare_proxy 
    conn.connect() 
    File "C:\Python\lib\site-packages\requests\packages\urllib3\connection.py", line 252, in connect 
    ssl_version=resolved_ssl_version) 
    File "C:\Python\lib\site-packages\requests\packages\urllib3\util\ssl_.py", line 305, in ssl_wrap_socket 
    return context.wrap_socket(sock, server_hostname=server_hostname) 
    File "C:\Python\lib\ssl.py", line 376, in wrap_socket 
    _context=self) 

    File "C:\Python\lib\ssl.py", line 747, in __init__ 
    self.do_handshake() 
    File "C:\Python\lib\ssl.py", line 983, in do_handshake 
    self._sslobj.do_handshake() 
    File "C:\Python\lib\ssl.py", line 628, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645) 

ein Zertifikat verwendet ich noch einen Fehler:

import requests 

spiders = requests.get('https://en.wikipedia.org/w/api.php',cert = 'c:\python\lib\site-packages\certifi\cacert.pem',verify = True) 
print(spiders) 

Traceback (most recent call last): 
    File "C:/Python/Files/3.py", line 3, in <module> 
    spiders = requests.get('https://en.wikipedia.org/w/api.php',cert = 'c:\python\lib\site-packages\certifi\cacert.pem',verify = True) 
    File "C:\Python\lib\site-packages\requests\api.py", line 67, in get 
    return request('get', url, params=params, **kwargs) 
    File "C:\Python\lib\site-packages\requests\api.py", line 53, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "C:\Python\lib\site-packages\requests\sessions.py", line 468, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Python\lib\site-packages\requests\sessions.py", line 576, in send 
    r = adapter.send(request, **kwargs) 
    File "C:\Python\lib\site-packages\requests\adapters.py", line 447, in send 
    raise SSLError(e, request=request) 
requests.exceptions.SSLError: [SSL] PEM lib (_ssl.c:2824) 

Selbst Wenn ich einige Tutorials wortgetreu befolgt habe, bin ich auf dieses Problem gestoßen, als der Kursleiter Zugriff ohne Problem hatte. Irgendwelche Ideen?

+0

Angabe eines Zertifikats mit 'cert =' nichts mit Überprüfung der Server-Zertifikat zu tun haben. Auf diese Weise können Sie dem Remote-Server zu Authentifizierungszwecken ein SSL-Zertifikat * vorlegen *. – larsks

Antwort

0

u SSL wie diese ignorieren können:

import requests 

spiders = requests.get('https://en.wikipedia.org/w/api.php',verify = False) 
print(spiders) 

andere Lösung:

from urllib.request import Request, urlopen 
rq = Request('https://en.wikipedia.org/w/api.php') 
response = urlopen(rq).read() 
+0

Das hat funktioniert. Aber ich verstehe nicht, warum der Fehler für Anfragen aber nicht für urllib.request erschien. Ist urllib3 für Python 3.5 defekt? – Zphinx677

+0

ich benutze immer noch python 3,2 (und 2,6) und urllib + urllib2 so für mich ist es schwer zu erkennen warum ist urllib3 so "empfindlich" –

+0

Sie erhalten Warnungen von Anfragen, wenn Sie verify = False. So deaktivieren Sie die Warnungen: requests.packages.urllib3.disable_warnings() – RiTu