我对学校网站的请求有疑问。我在网上搜索了解决方案,但没有一个适合我。我已经通过pip安装了certifi,它不起作用。我重新安装了openssl,但它没有用。
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2l 25 May 2017'
具体来说,SSL验证是这里的问题。我可以使用我的浏览器正确打开网页,而不会发出任何SSL警告,但我无法使用Python。
那么,接下来我该怎么办?希望有人可以给我一些建议。非常感谢
答案 0 :(得分:2)
阅读Python的requests
docs,
我发现了以下内容:
当您使用准备好的请求流程时,请记住它 没有考虑到环境。如果这可能会导致问题 您正在使用环境变量来改变行为 要求。例如:自签名SSL 证书
REQUESTS_CA_BUNDLE
不会被考虑在内。结果一个SSL: CERTIFICATE_VERIFY_FAILED
被抛出。你可以解决这个问题 通过明确的行为将环境设置合并到您的 会话:from requests import Request, Session s = Session() req = Request('GET', url) prepped = s.prepare_request(req) # Merge environment settings into session settings = s.merge_environment_settings(prepped.url, None, None, None, None) resp = s.send(prepped, **settings) print(resp.status_code)
我建议您阅读文档,因为我刚刚引用了原始文档的一部分。
除此之外,
请求验证HTTPS请求的SSL证书,就像Web一样 浏览器。默认情况下,启用SSL验证,请求将启用 如果无法验证证书,则抛出SSLError。
您可以使用verify
参数提供具有可信CA证书的CA_BUNDLE
文件或目录的路径:
>>> requests.get('https://your-school-website-url.com', verify='/path/to/cacert_file')
如果您将Requests
设置为verify
, False
也可以忽略验证 SSL证书 :
>>> requests.get('https://kennethreitz.org', verify=False)
<Response [200]>
默认情况下,verify
设置为True
。选项验证仅适用于主机证书。
再次,请阅读docs。