web-dev-qa-db-fra.com

SSL: CERTIFICATE_VERIFY_FAILED avec urllib

Je rencontre des problèmes avec le module urllib (Python 3.6). Chaque fois que j'utilise le module, j'obtiens la valeur d'une page d'erreurs.

quel est le problème avec urllib et comment y remédier?

import urllib.request
url='https://www.goodreads.com/quotes/tag/artificial-intelligence'
u1 = urllib.request.urlopen(url)
print(u1)

Ce bloc de code aime cracher cette bouchée de choses:

  Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1318, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output
    self.send(msg)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect
    server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 407, in wrap_socket
    _context=self, _session=session)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 814, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1068, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 689, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/a-nguyen/Downloads/EzSorses/APAsauce.py", line 3, in <module>
    u1 = urllib.request.urlopen(url)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 526, in open
    response = self._open(req, data)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 544, in _open
    '_open', req)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1361, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1320, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>

On dirait que quelque chose ne va pas avec le module lui-même.

8
unhappycat

Il existe un programme en ligne de commande que vous pouvez exécuter sur MacOsX qui installera les certificats:

Sudo /Applications/Python\ 3.6/Install\ Certificates.command

La commande Sudo vous demandera un mot de passe pour élever vos privilèges.

18
June

un hack sale mais rapide comme celui-ci fait le travail pour moi:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context
13
andilabs

J'ai eu le même problème. Ma python est la 3.6.5 et je suis sur Mac OSX. Lorsque j'ai essayé de me connecter aux sites HTTPS, j'ai commencé à obtenir le

<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>

exception. Donc, il était tellement évident pour moi que le python sur ma machine n'a pas de certificats. Je viens d'exécuter le fichier à partir du chemin /Applications/Python 3.6 avec un nom de fichier Installer Certificates.command. Cela a résolu mon problème. Je me suis référé à cela post .

4
Kiran Suvarna

Pour résoudre le problème, ouvrez votre bash et écrivez:

cd /Applications/Python 3.6

puis:

Sudo Certificates.command
0
Xing Han