我正在尝试使用python中的请求包来访问此站点:https://egov.uscis.gov/casestatus/landing.do 当我运行此命令时:
requests.get('https://egov.uscis.gov/casestatus/landing.do')
当您的身份验证验证失败时,我收到了常见的SSL错误。
通读stackoverflow并采用其中一个解决方案:在(.crt)中下载证书,然后使用openssl转换为.pem文件。然后我将此.pem文件中的内容复制到cacert.pem的末尾。但是这没用。
>>> requests.get('https://egov.uscis.gov/casestatus/landing.do')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\api.py", line 69, in get
return request('get', url, params=params, **kwargs)
File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\adapters.py", line 431, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
关于如何在不诉诸verify=False
通过https://superuser.com/a/97203和https://superuser.com/a/176721下载文件有什么不同吗?
因为requests.get('https://www.google.com')
没有问题,其他网站会对您下载的证书设置限制吗?
答案 0 :(得分:1)
egov.usics.gov does not provide SSL握手中的完整链条。
在网站管理员修复证书链问题之前,您需要采用类似于建议here的解决方法。您的案例中的中间证书可以从https://ssl-tools.net/certificates/yuox7i-symantec-class-3-secure-server-ca
获得答案 1 :(得分:0)
设置CA证书有三种方法:
$ pip install certifi
然后
>>> requests.get(url, verify=certifi.where())
>>> requests.get(url, verify='/path/to/cert_bundle_file')
>>> os.environ['REQUESTS_CA_BUNDLE'] = '/path/to/cert_bundle_file'
>>> requests.get(url)