快速修复
# 一键:升级到 yfinance>=1.7 并用 curl_cffi 的 firefox 指纹会话走代理(示例 SOCKS5 端口按你的代理改)
pip install -U yfinance curl_cffi && python3 -c "import yfinance as yf; yf.download('AAPL', period='5d', proxy='socks5h://127.0.0.1:7890')"
用你本地代理的实际端口(示例 7890);这一步同时解决"版本太老"和"通道不可达"。
你会遇到什么
yf.Ticker(...).history(...) 一跑就失败:日志先是 Cookie fetch from fc.yahoo.com failed (Timeout), continuing without it,然后是 Cookie/crumb fetch failed ... continuing without crumb,最后 Failed to get ticker ... curl: (28) Connection timed out after 10001 milliseconds。
在国内直连、或代理只放行部分域名时最容易出现——甚至 chart 接口能通,history 却一直挂。
本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。
为什么会这样
yfinance 取数据前先请求两个辅助接口:fc.yahoo.com 拿 Cookie、query1.finance.yahoo.com/v1/test/getcrumb 拿 crumb。这些域在国内直连普遍超时/不可达;代理如果只放行了部分域名,就会出现"chart 直连通、history 挂"的表象。
| 场景 | 现象(实测) |
|---|---|
| 国内直连 | fc.yahoo.com 超时 → crumb 失败 → curl: (28) |
| 代理部分放行 | chart 通、history 挂(漏放 fc/query1/query2 之一) |
| 1.6.x | crumb 获取失败 → 直接失败 |
| 1.7.x | cookie/crumb 失败仅告警,自动轮询 query1/query2;数据通道整体不可达仍失败 |
yfinance 拉历史数据是「三接口链」:先 fc.yahoo.com 拿 Cookie,再 query1.finance.yahoo.com/v1/test/getcrumb 拿 crumb,最后才用 crumb 调数据接口——前两步是前置依赖,任何一步不可达,历史数据就取不到。
「chart 直连通、history 挂」的表象来自部分放行:代理只放行了数据域名,漏放 fc/query1/query2 之一。
版本差异在失败语义:1.6.x crumb 失败直接失败;1.7.x 改为告警 + 自动轮询 query1/query2(数据通道整体不可达仍失败)。
确定性推论:curl: (28) 超时先定位是哪一环——分别 curl 三个域名;国内直连 = 三个都走代理(或全直连换数据源);代理场景 = 把 fc.yahoo.com、query1/query2.finance.yahoo.com 全部放行;1.7.x 下「有告警但能出数据」是正常降级,不是故障;判断路径:错误发生在 crumb 阶段 = 前置链断,发生在数据阶段 = 数据通道断。
一步步来
1. 升级 yfinance — 必做
pip install -U yfinance curl_cffi
≥1.7 对 cookie/crumb 失败宽容,还能自动轮询 query1/query2。
2. 走代理(直连被墙时) — 必做
用 curl_cffi 会话 + firefox 指纹 + HTTP/2,把 http/https 都指向代理(实测 SOCKS5 与 HTTP 代理均可用):
python3 - <<'EOF'
from curl_cffi import requests
s = requests.Session(impersonate="firefox", proxies={"http": "socks5h://127.0.0.1:7890", "https": "socks5h://127.0.0.1:7890"})
EOF
注意把 SOCKS5 换成你的实际端口;socks5h 让 DNS 也走代理。
3. 代理规则放行全部 Yahoo 端点 — 必做
fc.yahoo.com + query1/query2.finance.yahoo.com 都要可达。漏放任意一个 = 部分请求超时(文章场景)。
4. 定位卡点 — 排查
yf.enable_debug_mode
看日志卡在哪个域;再用同一 session 直接 GET https://query1.finance.yahoo.com/v8/finance/chart/... 对比是否可达。
怎么确认修好了
history 请求能正常返回数据(实测输出形态:14 行数据):
yf.Ticker("AAPL").history(period="5d")
→ DataFrame(14 行 × 7 列,Open/High/Low/Close/Volume…)
日志里不再出现 Cookie/crumb fetch failed 与 curl: (28) 超时。
其它环境的表现
| 环境 | 说明 |
|---|---|
| WSL 直连 | 实测被墙,完整复现报错链(fc.yahoo.com 超时 → crumb 失败 → curl 28) |
| Windows 侧 SOCKS5 代理(127.0.0.1:7890) | 实测全通:chart 200(HTTP/3)+ history OK(14 行) |
| 1.7.0 + hosts 阻断 fc.yahoo.com | 实测仅 cookie 失败仍成功 |
| 1.7.0 + 再阻断 query1 | 实测 crumb 失败仍成功(自动切 query2) |
| 代理漏放行某域 | 部分请求超时,需放行 fc/query1/query2 全部 |
症状
yf.Ticker(...).history(...) 反复失败,日志先出现 Cookie fetch from fc.yahoo.com failed (Timeout), continuing without it、Cookie/crumb fetch failed ... continuing without crumb,最终 Failed to get ticker ... curl: (28) Connection timed out after 10001 milliseconds。典型场景:国内网络直连 Yahoo、或代理只放行了部分域名(Chart API 能通但 history 挂)。
原因
yfinance 取数据前先请求两个辅助接口:fc.yahoo.com 拿 Cookie、query1.finance.yahoo.com/v1/test/getcrumb 拿 crumb。国内直连这两个域超时/被墙;代理部分放行时也会出现「chart 直连通、history 挂」的表象。版本差异(实测):1.6.x 里 crumb 获取失败会直接失败;1.7.x 已放宽(cookie/crumb 失败仅告警,数据端点可轮询 query1/query2),但数据通道整体不可达时仍然失败。
解法
- 直连超时 → 走代理:SOCKS5 与 HTTP 代理均实测可用(如
socks5h://127.0.0.1:7890),配合 curl_cffi session(firefox 指纹 + HTTP/2):
requests.Session(impersonate="firefox", http_version=CurlHttpVersion.V2TLS, proxies={"http": proxy, "https": proxy})
- 代理规则要放行全部 Yahoo 端点:
fc.yahoo.com+query1/query2.finance.yahoo.com都要可达;漏放行某个域 = 部分请求超时(文章场景)。 - 升级 yfinance ≥ 1.7:对 cookie/crumb 失败宽容 + 端点轮询降级,可降低偶发失败。
- 定位卡点:
yf.enable_debug_mode看日志卡在哪个域;用同一 session 直接get("https://query1.finance.yahoo.com/v8/finance/chart/...")对比。
验证证据
- 本地实测(2026-08-29):yfinance 1.7.0 + curl_cffi 0.16.2,WSL 直连 vs Windows 侧 SOCKS5 代理(127.0.0.1:7890)。
- 直连(被墙):完整复现文章报错链(fc.yahoo.com 超时 → crumb 失败 →
curl: (28) Connection timed out)。 - 代理全通:chart 200(HTTP/3)+ history OK(14 行)。
- 机制细节:hosts 阻断 fc.yahoo.com → 1.7.0 仅 cookie 失败仍成功;再阻断 query1 → crumb 失败仍成功(自动切 query2)——验证版本差异。
- 实测复现日志(2026-08-29)
适用工具 (1)
本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。
yfinance · 外部工具来源与证据
← 网关与路由 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡