gpt4 book ai didi

python - 如何解决 [SSL : CERTIFICATE_VERIFY_FAILED] Error when Using urllib without bypassing SSL verification

转载 作者:行者123 更新时间:2023-12-04 22:39:54 24 4
gpt4 key购买 nike

import urllib.request
import json

gojson = 'https://nominatim.openstreetmap.org/details.php?osmtype=W&osmid=17025436&class=highway&addressdetails=1&hierarchy=0&group_hierarchy=1&format=json&polygon_geojson=1'
res_body = urllib.request.urlopen(gojson).read()
错误:
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)>
我知道我可以通过使用以下代码来解决该错误:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
但我更想知道如何解决这个问题。我在网上搜索时找不到解决方案。有什么建议吗?

最佳答案

一种方法是通过 urllib.request.urlopen()可选的“cafile”参数,带有可信 CA 包的完整路径,如 生成的“cacert.pem”文件证书 .这可以通过 certifi.where() 来完成来自 证书 包裹。
例如,使用您的代码片段:

import certifi  #added import
import json
import urllib.request


gojson = 'https://nominatim.openstreetmap.org/details.php?osmtype=W&osmid=17025436&class=highway&addressdetails=1&hierarchy=0&group_hierarchy=1&format=json&polygon_geojson=1'
res_body = urllib.request.urlopen(gojson, cafile=certifi.where()).read() #modified function call to add cafile argument
当然,您可以使用您想要的任何文件或路径,我只是提供了上面的示例,因为它需要在本地文件系统上进行较少的探索,并且对于最少的工作量似乎相对值得信赖。使用经过验证/受信任的 CA 捆绑包而不是关闭 ssl 验证通常是一种更安全的做法,这是一个好问题。
我的环境:
macOS 大苏尔,
python 3.9
引用:
  • [用于提供 Mozilla 的 CA Bundle 的 Python 包。] https://pypi.org/project/certifi/
  • [包存储库] https://github.com/certifi/python-certifi
  • 【功能详情】https://docs.python.org/3.9/library/urllib.request.html?highlight=urlopen#urllib.request.urlopen
  • 【发证机关】https://www.ssl.com/faqs/what-is-a-certificate-authority/
  • 关于python - 如何解决 [SSL : CERTIFICATE_VERIFY_FAILED] Error when Using urllib without bypassing SSL verification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69692910/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com