2016-06-30 11 views
0

Wenn ich benutze:Unterschied zwischen Request.get() und urrlib.request.urlopen() Python

import request 
r = request.get("https://example.com") 

Ich erhalte die folgende Ausnahme:

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645) 

Wenn ich jedoch folgenden Code verwenden, :

url = "https://www.example.com" 
request = urllib.request.urlopen(url) 

Es gibt mir die richtige Antwort [200] Code. Wieso ist es so? Was ist der Unterschied zwischen diesen beiden Methoden und welche sollte man bevorzugen?

Antwort

0

Verwenden Sie die ehemalige: Ich werde die Quelle hinzufügen, warum es besser ist. Sowieso müssen Sie verify als False, um die request von Überprüfung von SSL-Zertifikaten für HTTPS-Anfragen verhindern:

import request 
r = request.get("https://example.com", verify=False) 

Edit:

Unterschied zwischen Request.get() und urrlib.request.urlopen () python

What are the differences between the urllib, urllib2, and requests module?

+0

Also korrigieren Sie mich, wenn ich falsch liege, request.get() [mit der Standardeinstellung verify = true] wird versuchen, das Zertifikat zu überprüfen und urllib.request.urlopen() tut das nicht. –

+0

es ist explizit mit https-Verbindung getan https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection – wolframalpha

+0

Danke, ich habe es jetzt. Es ist immer besser, request.get/post zu verwenden, damit es die ssl-Überprüfung für Sie durchführt. Danke für die Klarstellung! –

0

Dies geschieht, weil example.com kein gültiges Zertifikat besitzt. Auf diese Weise warnen Sie, dass die https-Verbindung nicht vertrauenswürdig ist. Wenn Sie dem Server vertrauen, sollten Sie tun, was wolframalpha vorgeschlagen hat.

Verwandte Themen