fsspec的HTTPS文件系统直接读取URL失败原因咨询
问题根因
你遇到的getaddrinfo failed报错属于域名解析失败,本质是直接初始化HTTPS文件系统时代理配置未生效,请求尝试直连公网站点,在内网环境下无法完成域名解析导致报错。
直接使用https协议时参数传递存在不规范问题:trust_env是fsspec的HTTPFileSystem原生构造参数,你将其放入client_kwargs中传递时,部分版本的fsspec无法识别该配置,会默认使用trust_env=False的逻辑,不会加载系统环境变量中的HTTP_PROXY/HTTPS_PROXY代理配置,请求直连自然无法连通。
使用simplecache包装后能正常运行的原因是:simplecache初始化目标https协议时,会完整透传所有配置参数,会触发代理配置的加载逻辑,请求走代理完成转发,所以能正常获取内容。
修复方案
直接使用https协议时,将trust_env作为顶级参数传入即可,无需放入client_kwargs,修改后代码如下:
import socket import aiohttp import fsspec _hostname = socket.gethostname() pwd = "你的代理密码" proxy_auth = aiohttp.BasicAuth(_hostname, pwd) # trust_env作为fsspec.filesystem的直接入参 of = fsspec.filesystem("https", trust_env=True, client_kwargs={"auth": proxy_auth}) http_urls = ["https://stackoverflow.com/"] print(of.cat(http_urls))
如果修改参数后仍报错,可以在代码开头手动指定环境变量的代理配置:
import os os.environ["HTTP_PROXY"] = "http://你的代理地址:端口" os.environ["HTTPS_PROXY"] = "http://你的代理地址:端口"
内容的提问来源于stack exchange,提问作者MSS
相关产品推荐
相关产品推荐

