You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用YahooFinanceApi Nuget包报Failure to create client异常咨询

问题背景

可通过Nuget获取的YahooFinanceApi在数月前仍可正常运行,近期调用会抛出客户端创建失败的异常。
可复现问题的示例代码如下:

using YahooFinanceApi;

var data = Yahoo.GetHistoricalAsync("MSFT", new DateTime(2021, 1, 1), DateTime.Now).Result;

运行上述程序的报错信息如下:

Unhandled exception. System.AggregateException: One or more errors occurred. (Failure to create client.)
 ---> System.Exception: Failure to create client.
   at YahooFinanceApi.YahooClientFactory.CreateClientAsync(CancellationToken token)
   at YahooFinanceApi.YahooClientFactory.GetClientAndCrumbAsync(Boolean reset, CancellationToken token)
   at YahooFinanceApi.Yahoo.GetResponseStreamAsync(String symbol, Nullable`1 startTime, Nullable`1 endTime, Period period, String events, CancellationToken token)
   at YahooFinanceApi.Yahoo.GetTicksAsync[ITick](String symbol, Nullable`1 startTime, Nullable`1 endTime, Period period, ShowOption showOption, Func`2 instanceFunction, CancellationToken token)
   at YahooFinanceApi.Yahoo.GetHistoricalAsync(String symbol, Nullable`1 startTime, Nullable`1 endTime, Period period, CancellationToken token)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at Program.<Main>$(String[] args) in C:\Users\dharm\Dropbox\Documents\VisualStudio\YahooFinanceApiSpx\YahooFinanceApiSpx\Program.cs:line 3
咨询问题

有什么可行的解决方案,能够让上述示例程序正常运行?

可行解决方案

这个报错的核心原因是原版YahooFinanceApi已经长期停止更新,没有适配雅虎财经近年调整的接口鉴权规则、反爬拦截策略,导致客户端初始化阶段过不了校验,直接抛出创建失败的异常。可以按自己的需求选下面的方案修复:

  • 替换为社区维护的适配版本,操作最简单
    直接卸载项目里装的原版YahooFinanceApi包,安装社区持续迭代的维护分支版本即可。这类版本已经适配了雅虎最新的Cookie校验、Crumb鉴权、请求头校验规则,装完之后原来写的代码不用改一行,就能正常拉取数据。
  • 手动修改原版包的请求逻辑,适合不想换包的场景
    1. 修改YahooClientFactory里的客户端初始化代码,给HttpClient加上标准浏览器的User-Agent请求头,原版默认带的空请求头会被雅虎接口直接拦截
    2. 补全鉴权流程:先请求雅虎财经主页拿到合法的Cookie集合,携带有效Cookie再请求Crumb接口拿到鉴权参数,后面所有拉取行情的请求都必须同时带有效Cookie和Crumb参数,才能正常返回数据
    3. 调整调用写法:别直接在同步上下文里用.Result调用异步方法,很容易引发线程死锁,把调用逻辑放到异步方法里用await调用即可
  • 自行实现轻量请求逻辑,可控性最强
    完全不用依赖第三方封装包,自己初始化一个带标准浏览器请求头的HttpClient,按照上面说的鉴权流程拿到有效Cookie和Crumb之后,直接请求雅虎财经的历史行情接口,自行解析返回的CSV格式行情数据就可以。整个逻辑加起来不到一百行代码,不会因为第三方包停更就无法使用,后续雅虎接口调整时也可以快速自行适配。

内容的提问来源于stack exchange,提问作者dharmatech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:47:07