代理环境下使用yfinance调用sp500.info遇ConnectTimeout错误求解决
解决yfinance调用
info时的代理超时问题 问题背景
已完成yfinance升级安装:
pip install yfinance --upgrade --no-cache-dir
可成功初始化Ticker对象:
import yfinance as yf sp500=yf.Ticker("^GSPC") print ("got sp500")
但调用sp500.info时,无论是否设置sp500.proxy="http://my-proxy.org.com:xxx",均出现以下连接超时错误:
ConnectTimeout: HTTPSConnectionPool(host='fc.yahoo.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x0000028F3FA23590>, 'Connection to fc.yahoo.com timed out. (connect timeout=30)'))
处于代理环境,问题与代理配置相关。
解决方案
1. 全局配置requests代理(推荐)
yfinance依赖requests库发起网络请求,直接给requests会话全局配置代理,优先级高于单个Ticker的proxy设置:
import requests import yfinance as yf # 配置HTTP/HTTPS代理 proxies = { 'http': 'http://my-proxy.org.com:xxx', 'https': 'http://my-proxy.org.com:xxx' } # 更新全局会话的代理设置 requests.Session().proxies.update(proxies) # 初始化Ticker并调用info sp500 = yf.Ticker("^GSPC") print(sp500.info)
若代理需要身份认证,格式为http://用户名:密码@my-proxy.org.com:xxx
2. 验证代理的HTTPS支持
错误提示为HTTPS连接超时,需确认代理服务器是否支持HTTPS请求转发。部分代理仅配置了HTTP协议,需在代理端开启HTTPS支持,或更换支持HTTPS的代理地址。
3. 延长请求超时时间
yfinance默认超时时间为30秒,可通过修改Ticker的timeout参数延长:
import yfinance as yf sp500 = yf.Ticker("^GSPC") sp500.proxy = "http://my-proxy.org.com:xxx" sp500.timeout = 60 # 设置超时为60秒 print(sp500.info)
4. 单独测试代理连通性
先通过requests直接测试代理能否访问目标域名,排除代理本身的连通性问题:
import requests proxies = { 'https': 'http://my-proxy.org.com:xxx' } try: resp = requests.get('https://fc.yahoo.com', proxies=proxies, timeout=30) print(f"代理访问成功,状态码: {resp.status_code}") except Exception as e: print(f"代理访问失败: {str(e)}")
若测试失败,需联系代理管理员排查,或更换可用代理。
内容的提问来源于stack exchange,提问作者kathikeyan A
相关产品推荐
相关产品推荐

