python - python3安全问题,os.system('wget...') vs urllib.request.urlopen(...)
问题描述
今天我在无头驱动的打印服务器(RaspPi / python3)中遇到了一个奇怪的行为。
我需要从 Web 服务器下载 PDF 或渲染的 python 脚本。到目前为止,我确实使用过:
src = "https://ssl.server.tld/path/to/file.pdf"
target = "/path/to/saved.pdf"
os.system("wget -O "+target+" "+src)
从现在开始,我使用:
with urllib.request.urlopen(src) as response, open(target, 'wb') as out_file:
data = response.read()
out_file.write(data)
问题是:几天后显然 SSL 证书已经过时了。该os.system()
版本抛出一个非 Python 错误
https://ssl.***.de/config_page.py
Auflösen des Hostnamen »ssl.***.de (ssl.***s.de)«... 176.***.***.10
Verbindungsaufbau zu ssl.***.de (ssl.***.de)|176.***.***.10|:443... verbunden.
FEHLER: Dem Zertifikat von »ssl.***.de« wird nicht vertraut.
FEHLER: Das Zertifikat von »ssl.***.de« ist abgelaufen.
正如我所提到的,没有 python 错误或异常,正在下载我想要的文件,但大小为 0 字节。只有调试器在控制台输出中显示上面引用的文本。
该urllib
版本按需要运行,没有错误,没有控制台输出,并且文件正确。
我错过了什么?这是一种特殊的安全行为os.system()
吗?
感谢您的回答。
解决方案
如您所知,wget
正在验证证书而urlopen
不是。
如果要wget
跳过检查证书,请添加参数--no-check-certificate
推荐阅读
- mongodb - Docker 运行不工作
- java - 给定矩阵中最大岛屿的算法
- swift - iOS-Charts 库:没有显示支持数据的 x 轴标签
- build - 将 pandoc 构建到 yocto core-image-minimal
- c# - 对于 web api 2.2 解决方案,您将如何处理这个特定的 api 补丁版本控制?
- c# - 无法将 System.Double 强制转换为 System.Object。LINQ to Entities 仅支持转换 EDM 基元或枚举类型
- javascript - 更改标签 Chart.js 的背景颜色
- python - 类属性转换
- c++ - OpenGL 项目给出错误“进程以退出代码 -1073741515 (0xC0000135) 完成”
- python - 计算多组数据的平均值(性能问题)