【问题标题】:How to disable SSL verification for urlretrieve?如何禁用 urlretrieve 的 SSL 验证?
【发布时间】:2017-04-04 10:00:04
【问题描述】:

类似的问题已经被问过几次,但解决方案是针对urlopen。该函数采用可选的context 参数,该参数可以接受预配置的 SSL 上下文。 urlretrieve 没有这个参数。如何绕过以下调用中的 SSL 验证错误?

urllib.request.urlretrieve(
    "http://sourceforge.net/projects/libjpeg-turbo/files/1.3.1/libjpeg-turbo-1.3.1.tar.gz/download", 
    destFolder+"/libjpeg-turbo.tar.gz")

【问题讨论】:

    标签: python urllib2


    【解决方案1】:

    这个解决方案对我也很有效:在调用库之前,定义默认 SSL 上下文:

    import ssl
    ssl._create_default_https_context = ssl._create_unverified_context
    # urllib.request.urlretrieve(...)
    

    来源:http://thomas-cokelaer.info/blog/2016/01/python-certificate-verified-failed/

    【讨论】:

    • 上述解决方案适用于 mac 上的 python 3.7.4(安装 pyenv)
    【解决方案2】:

    urlretrieve 似乎无法做到这一点(在 Python >=2.7.9 或 Python >=3.0 中)。

    建议使用requests 包作为替代。

    编辑添加:上下文参数已添加到代码中,即使文档中没有提到它!帽子提示@Sushisource

    【讨论】:

    • 这至少从 2.7.14 开始是可能的
    • @Sushisource:我看不到任何真实的证据,但我希望被证明是错误的。请发布一个新答案,并附上一些支持它的文档或代码的链接。
    • 文档中没有,但是 urlretrieve 函数很高兴地接受了 2.7.14 中的上下文参数
    • 哇,你是对的。是added 3 years ago,但文档似乎没有更新。
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2021-06-04
    • 2022-08-04
    相关资源
    最近更新 更多