如何让依赖requests的Python包Meteostat通过HTTP代理访问
解决Meteostat在办公代理环境下的URLError问题
问题原因
你手动定义的proxies字典只是局部变量,Meteostat内部发起的requests请求并不会自动使用这个配置,导致代理未生效,出现URLError: <urlopen error [Errno 2] No such file or directory>错误。
解决方法
方法一:给Meteostat配置自定义请求Session
通过创建带代理的requests Session,并让Meteostat的底层加载器使用这个Session,就能让所有内部请求走代理:
import requests from datetime import datetime import matplotlib.pyplot as plt from meteostat import Monthly from meteostat.core.loader import Loader # 替换成你的办公代理地址 proxies = { 'http': 'http://your-proxy:port', 'https': 'http://your-proxy:port', } # 创建带代理的Session session = requests.Session() session.proxies.update(proxies) # 让Meteostat使用这个Session Loader.session = session # 原示例代码 start = datetime(2000, 1, 1) end = datetime(2018, 12, 31) data = Monthly('10637', start, end) data = data.fetch() data.plot(y=['tavg', 'tmin', 'tmax']) plt.show()
如果代理需要用户名密码认证,格式改为:http://username:password@your-proxy:port
方法二:设置系统环境变量(无需修改代码)
在运行脚本前,设置代理相关的环境变量,requests会自动读取这些配置:
- Windows命令行:
set HTTP_PROXY=http://your-proxy:port set HTTPS_PROXY=http://your-proxy:port
- Linux/macOS终端:
export HTTP_PROXY=http://your-proxy:port export HTTPS_PROXY=http://your-proxy:port
设置完成后直接运行你的Python脚本即可。
内容的提问来源于stack exchange,提问作者entropy
相关产品推荐
相关产品推荐

