Power Query调用Yahoo Finance API:缺失参数与Headers配置咨询
解决Power Query调用Yahoo Finance API的验证问题
一、除Crumb外的必填核心要素
- 绑定的Cookie:Crumb并非独立生效,它和Yahoo生成的会话Cookie(核心是
B和YF-PROXY-CSRF字段)一一绑定。浏览器能正常请求是因为自动携带了当前会话的Cookie,而Power Query默认是全新会话,没有对应Cookie的话,仅传Crumb会被服务器拒绝。 - 其他格式要求:
symbols参数需保证格式正确,多个股票代码用逗号分隔(比如symbols=AAPL,MSFT),无其他强制必填的查询参数。
二、必须传入的Headers参数
调用Yahoo Finance API时,Headers至少要包含以下参数:
Cookie:值为从Yahoo Finance主页或getcrumb接口获取的完整Cookie字符串(必须包含和Crumb匹配的B、YF-PROXY-CSRF字段)User-Agent:模拟浏览器的请求标识,示例:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36(Yahoo会拦截非浏览器UA的请求)Accept:application/json, text/plain, */*,明确告知服务器返回JSON格式内容YF-PROXY-CSRF:值和Crumb一致,部分场景下需单独传入,强化验证匹配
三、Power Query里的正确实现步骤示例
- 先获取有效Cookie:
请求Yahoo Finance主页提取会话Cookie:let // 请求Yahoo主页获取会话Cookie homeResponse = Web.Contents("https://finance.yahoo.com/", [Headers=[#"User-Agent"="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"]]), // 提取Cookie头 cookie = ResponseHeaders(homeResponse){[Name="Set-Cookie"]}[Value] in cookie - 用Cookie获取Crumb:
携带Cookie请求getcrumb接口:let cookie = "替换成上一步获取的Cookie", crumbResponse = Web.Contents("https://query1.finance.yahoo.com/v1/test/getcrumb", [ Headers=[ #"User-Agent"="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", #"Cookie"=cookie ] ]), crumb = Text.FromBinary(crumbResponse) in crumb - 用Cookie+Crumb请求Quote数据:
let cookie = "替换成有效Cookie", crumb = "替换成获取到的Crumb", ticker = "AAPL", url = "https://query2.finance.yahoo.com/v7/finance/quote?symbols=" & ticker & "&crumb=" & crumb, response = Web.Contents(url, [ Headers=[ #"User-Agent"="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", #"Cookie"=cookie, #"Accept"="application/json, text/plain, */*" ] ]), jsonData = Json.Document(response) in jsonData
关键注意事项
- Cookie和Crumb的有效期很短,每次请求前都需要重新获取,不能长期复用
- Power Query里遇到凭证提示时,选择「匿名」,通过Headers手动传入Cookie和其他参数,不要使用系统默认凭证设置
- 若仍报错,检查UA是否为最新浏览器标识,Cookie是否包含
B和YF-PROXY-CSRF字段
内容的提问来源于stack exchange,提问作者FloresCapitalSolutions
相关产品推荐
相关产品推荐

