2016-06-30 2 views
0

Когда я использую:Разница между request.GET() и urrlib.request.urlopen() питона

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

я получаю следующее исключение:

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

Однако, если я использую следующий код :

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

Это дает мне правильный код ответа [200]. Почему это так? В чем разница между этими двумя методами и какой из них следует отдать предпочтение?

ответ

0

Использовать прежний: Я добавлю источник, почему это лучше. В любом случае вам необходимо установить verify в False, чтобы предотвратить request от проверки SSL сертификатов для запросов HTTPS:

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

Edit:

Разница между request.GET() и urrlib.request.urlopen () питон

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

+0

Так исправьте меня, если я ошибаюсь, request.get() [with default verify = true] попытается проверить сертификат, а urllib.request.urlopen() этого не делает. –

+0

все сделано с помощью https-соединения https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection – wolframalpha

+0

Спасибо, я получил его сейчас. Всегда лучше использовать request.get/post, чтобы он выполнил проверку ssl для вас. Спасибо за разъяснения! –

0

Это происходит потому, что example.com не имеет действительного сертификата. Поэтому запросы предупреждают вас, что https-соединение не будет доверено. Если вы доверяете серверу, тогда вы должны сделать то, что предложил вольфрамалфа.

Смежные вопросы