我有一个用于测试的服务器设置,带有自签名证书,并且希望能够测试它.

How do you ignore SSL verification in the Python 3 version of 100?

我找到的所有信息都是关于urllib2或Python 2的.

python 3中的urllib已从urllib2更改为:

Python 2, urllib2: urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])

https://docs.python.org/2/library/urllib2.html#urllib2.urlopen

Python 3: urllib.request.urlopen(url[, data][, timeout])

所以我知道这可以在Python2中通过以下方式实现.然而,Python 3 urlopen缺少上下文参数.

import urllib2
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

urllib2.urlopen("https://your-test-server.local", context=ctx)

是的,我知道这是个坏主意.这只适用于在专用服务器上进行测试.

我在Python3文档或任何其他问题中都找不到应该如何做到这一点.即使是那些明确提到Python 3的人,仍然有一个针对urllib2/Python 2的解决方案.

推荐答案

被接受的答案只是建议使用python 3.5+,而不是直接回答.这会引起混乱.

对于寻求直接答案的人,这里是:

import ssl
import urllib.request

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

with urllib.request.urlopen(url_string, context=ctx) as f:
    f.read(300)

或者,如果你使用requests库,它有更好的API:

import requests

with open(file_name, 'wb') as f:
    resp = requests.get(url_string, verify=False)
    f.write(resp.content)

答案摘自此帖(谢谢@falsetru):How do I disable the ssl check in python 3.x?

这两个问题应该合并.

Python-3.x相关问答推荐

如何定义既允许固定单词又允许模式的pydanti.BaseModel?

使用具有相同索引的多次出现的索引列表更新NumPy数组

DataFrame列中如何迭代重复值?

如何通过 python 使用 auth no priv 获取 SNMPv3?

在 string.find() 条件下加入两个 Dataframes

Python 列表求和所有出现的保留顺序

如果值超出上下限(异常值处理),则将值的数据框替换为 np.nan

如何向 scikit-learn 函数添加类型提示?

你如何表达一个没有参数的 Python Callable?

全局捕获快速 api 中的异常

为什么等效的 Python 代码要慢得多

判断 dict.items() 中的成员资格的时间复杂度是多少?

如何在不使用 @hydra.main() 的情况下获取 Hydra 配置

AttributeError:系列对象没有属性iterrows

如何区分文件之类的对象和文件路径之类的对象

python - 使用 matplotlib 和 boto 将绘图从内存上传到 s3

TypeError:只有整数标量数组可以转换为标量索引

matplotlib - 模块sip没有属性setapi

如何为 anaconda python3 安装 gi 模块?

十六进制字符串到 Python 3.2 中的带符号整数?