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

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相关问答推荐

如何获得大Pandas 的常见时间间隔

如何在输入正确的用户名和密码时添加按钮?

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

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

在Pandas中,根据另一列中的重复值将数据分组为一列

数据框中从每个组/ID的底部删除行

Pandas 转换为日期时间

列出相同索引的Pandas

有没有办法使用重采样矢量化添加缺失的月份?

Python多进程:运行一个类的多个实例,将所有子进程保留在内存中

如何将虚拟变量列转换为多列?

判断是否存在大文件而不下载它

内部如何使用 Python 语法?

获取比较多列的最大值并返回特定值

无法在 macOS 上的 Anaconda3 python3.6 上安装 OpenCV3

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

AttributeError:LinearRegression 对象没有属性coef_

类方法和实例方法同名

对字节进行按位运算

如何使用异步 for 循环遍历列表?