由于SSL证书错误,无法访问维基百科API

时间:2016-04-05 11:47:35

标签: python ssl-certificate python-requests

import requests

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

使用上面的代码我收到以下错误:

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)

使用证书我仍然收到错误:

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)

即使我已经逐字地阅读了一些教程,但当教师访问w / o问题时我遇到了这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你可以忽略这样的SSL:

import requests

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

其他解决方案:

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