我正在尝试使用Python抓取此网页: https://fftoolbox.scoutfantasysports.com/football/rankings/PrintVersion.php
我一直在使用请求包。我可以通过设置verify=False
“解决”该问题,但是我读过那并不安全。在其他线程中,人们说将requests.get()
函数指向相关证书的文件路径。我从浏览器中导出了证书,然后尝试了一下,但是没有运气。这个
requests.get('https://fftoolbox.scoutfantasysports.com/football/rankings/PrintVersion.php',verify='C:/Users/ericb/Desktop/fftoolboxscoutfantasysportscom.crt')
仍然给出SSL错误
SSLError: HTTPSConnectionPool(host='fftoolbox.scoutfantasysports.com', port=443): Max retries exceeded with url: /football/rankings/PrintVersion.php (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))
还有这个
requests.get('https://fftoolbox.scoutfantasysports.com/football/rankings/PrintVersion.php',cert='C:/Users/ericb/Desktop/fftoolboxscoutfantasysportscom.crt')
收益
Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]
以前,我已经进行了大量的网络爬虫,但是直到现在,我再也不需要处理证书。我该如何解决?我还要注意,我想将最终的Python脚本及其使用的任何文件放到公共GitHub存储库中。但是我不想做任何会危害我安全性的事情,例如上传密钥或其他东西。
答案 0 :(得分:1)
服务器配置错误,它没有发送需要发送的中间证书。 查看此报告:https://www.ssllabs.com/ssltest/analyze.html?d=fftoolbox.scoutfantasysports.com&hideResults=on
提供的证书1(1776字节)
链问题不完整
或https://sslanalyzer.comodoca.com/?url=fftoolbox.scoutfantasysports.com
被微软信任吗?否(无法获取本地发行者证书)
被Mozilla信任吗?否(无法获取本地发行者证书)
使用openssl s_client -connect fftoolbox.scoutfantasysports.com:443 -showcerts
,您可以看到:
Certificate chain
0 s:/OU=Domain Control Validated/CN=fftoolbox.scoutfantasysports.com
i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
并且应该将网络服务器配置为发送/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
中间证书,但不能发送。
因此,您可以联系网站,并告知他们配置错误。如第二个链接所示,您将不是唯一受此影响的人。
或者,您可以在本地将丢失的证书添加为完全信任,但这会降低安全性。您还可以在本地下载丢失的证书(不是网站的证书,不是网站的证书),并在verify=/path/to/certificate
通话中添加requests.get
。