首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3 urllib忽略SSL证书验证

Python 3 urllib忽略SSL证书验证
EN

Stack Overflow用户
提问于 2016-04-13 13:53:03
回答 2查看 54K关注 0票数 36

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

在Python3版本的urlopen**?**中如何忽略SSL验证?

我发现的有关这方面的所有信息一般都是关于urllib2或Python2的。

python 3中的urlliburllib2不同

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

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

Python 3urllib.request.urlopen(url[, data][, timeout]) https://docs.python.org/3.0/library/urllib.request.html?highlight=urllib#urllib.request.urlopen

因此,我知道这可以通过以下方式在Python 2中完成。然而,Python3 urlopen缺少上下文参数。

代码语言:javascript
复制
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)

是的,我知道这是个坏主意。这只用于在私有服务器上进行测试。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-11 08:44:13

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

对于一个寻求直接答案的人来说,这里是:

代码语言:javascript
复制
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:

代码语言:javascript
复制
import requests

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

答案是从这篇文章中复制的(谢谢@法尔塞楚):如何在python3.x中禁用ssl检查?

这两个问题应该合并。

票数 48
EN

Stack Overflow用户

发布于 2016-04-13 14:17:17

Python3.0到3.3没有上下文参数,它是在Python3.4中添加的。因此,您可以将您的Python版本更新为3.5以使用上下文。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36600583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档