我是一个新手程序员,所以请原谅我的错误。我已经写了下面的代码,以验证一个网站列表仍然活跃,我所有的工作是基于这个问题的声明。
脚本能够检查大多数站点,但遇到以下https://precisionit.net/错误
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)>
上面的URL在Firefox和Chrome中打开正常,但在Python代码中无法打开。我已经更新了cereri,并按照许多人的建议在我的代码中使用它,但错误不会消失。
我使用的是Conda Python Env,还执行了以下命令
conda install -c conda-forge certifi
有很多帖子建议运行“Install Certificates.command”,但它不适用于Conda Python,所以我下载了Python 3.9安装程序并执行了“Install Certificates.command”,然后用Python 3.9执行了脚本,但没有成功。我觉得问题是,即使使用最新版本的证书,站点证书也没有得到验证。尽管certifi page说该列表是基于Mozilla的。的根证书我猜这不是一个完全的副本,这就是为什么火狐浏览器能够打开该网站。不确定我的理解是否有意义,并会很高兴得到纠正。
粘贴我的脚本下面。我不知道还需要做什么来解决这个问题,请建议。
import urllib.request
import sys
import certifi
import ssl
def checkURL(url):
try:
hdr = { 'User-Agent' : 'Mozilla/79.0 (Windows NT 6.1; Win64; x64)' }
req=urllib.request.Request(url,headers=hdr)
r = urllib.request.urlopen(req,timeout=100,context=ssl.create_default_context(cafile=certifi.where()))
except Exception as e:
#print(r.read())
print('Failed Connecting to Website')
print(e)
return(1)
print(r.status)
finalurl = r.geturl()
if r.status==200:
print(finalurl)
return(0)
else:
print("Website Not Found")
return(2)
checkURL('https://precisionit.net/')
型
2条答案
按热度按时间btqmn9zl1#
我也遇到过类似的问题,我就是这样解决的。
首先,检查站点证书的颁发者是谁。您可以通过多种方式进行检查(在浏览器中检查,使用
openssl
连接...)。最简单的可能是直接转到
https://www.digicert.com/help/
并搜索https://precisionit.net
。你可能错过了
Sectigo RSA Domain Validation Secure Server CA
。只要去他们的网站(https://support.sectigo.com/Com_KnowledgeDetailPage?Id=kA01N000000rfBO)下载就行了。然后使用
certifi.where()
获取保存证书的cacert.pem
文件的位置,只需将下载的证书内容添加到该文件中。证书应采用表格形式
hc8w905p2#
第一步:将站点公钥保存为base74第二步:添加代码来验证你保存的文件。
enter image description here