Python读取HTTP路径图片触发OSError的代码修改咨询
报错核心原因
Python 内置的open()函数仅能识别本地文件系统的绝对/相对路径,完全不支持解析http://、https://开头的网络资源地址。直接把网络URL传给open(),就会触发OSError: [Errno 22] Invalid argument的报错,和你当前遇到的问题完全匹配。
代码调整方案
要获取网络地址上的图片二进制内容,需要先通过HTTP请求拉取对应资源,再将读取到的二进制内容封装为你需要的字典结构,以下是两种常用的实现方式:
方式1:使用Python标准库(无需额外安装依赖)
借助标准库urllib发起请求,不需要安装第三方包就能直接运行:
import urllib.request def get_pic(data): img_url = 'http://192.168.1.100:8123/pic/2021-03-31/snap/238371315.jpg' # 发起请求拉取网络图片,自动管理请求连接的关闭 with urllib.request.urlopen(img_url) as response: img_binary = response.read() pic = {'image': img_binary} return pic
方式2:使用requests库(项目已有依赖时推荐)
如果你的项目已经引入了常用的HTTP请求库requests,写法更简洁,错误处理更完善:
import requests def get_pic(data): img_url = 'http://192.168.1.100:8123/pic/2021-03-31/snap/238371315.jpg' resp = requests.get(img_url) # 主动校验请求状态,遇到404、500等错误时直接抛出异常,避免拿到无效内容 resp.raise_for_status() pic = {'image': resp.content} return pic
注意事项
- 运行代码的设备需要和部署图片资源的
192.168.1.100:8123服务网络连通,无防火墙拦截,确保对应URL可以直接通过浏览器正常打开访问。 - 从你给出的报错日志看,实际运行时加载的图片URL是
http://192.168.1.100:8123/pic/2021-04-01/snap/939450165.jpg,和代码里写死的2021-03-31路径不一致,需要确认动态拼接图片URL的逻辑是否正确,避免路径拼错导致404。 - 以上方式拿到的图片二进制内容,和原来用
open(本地路径, 'rb')获取的内容格式完全一致,可以直接适配你下游的接口调用逻辑,不需要额外做格式转换。
内容的提问来源于stack exchange,提问作者Win Wongsawatdichart
相关产品推荐
相关产品推荐

