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

.NET Core中HttpClient调用Coinbase API返回400错误,curl请求正常

问题分析与解决办法

你的问题确实大概率和请求头有关。curl会自动带上一些符合HTTP规范的默认请求头,而HttpClient默认的请求头非常精简,Coinbase的API可能因为缺少必要头或者头不符合要求,直接返回400错误。

关键差异:请求头的默认值

举个例子,curl默认会发送类似User-Agent: curl/7.81.0和Accept: */*的请求头,但HttpClient默认的User-Agent要么是System.Net.Http.HttpClient,要么在某些环境下直接为空——这类非标准的User-Agent很容易被API的反爬或合规校验拦截。

修复代码示例

给HttpClient手动添加上必要的请求头,就能解决问题:

using (var client = new HttpClient())
{
    // 添加和curl一致的User-Agent和Accept头
    client.DefaultRequestHeaders.UserAgent.ParseAdd("curl/7.81.0");
    client.DefaultRequestHeaders.Accept.ParseAdd("*/*");

    string endpoint = "https://api.exchange.coinbase.com/products/BTC-USDT/trades/?limit=100";
    var response = await client.GetAsync(endpoint);
    
    // 建议读取响应内容,查看API返回的具体错误信息(如果还有问题)
    var responseContent = await response.Content.ReadAsStringAsync();
    Console.WriteLine(response.StatusCode);
    Console.WriteLine(responseContent);
}

额外排查技巧

  • 查看具体错误详情:你现在只打印了响应状态,建议读取response.Content的字符串内容,Coinbase API通常会返回JSON格式的错误说明,能帮你精准定位问题。
  • 对比完整请求头:如果添上头还是不行,用curl -v命令查看curl发送的所有请求头,然后在HttpClient里完全复刻:
    curl -v "https://api.exchange.coinbase.com/products/BTC-USDT/trades/?limit=100"
    
  • 检查URL编码:虽然你的URL看起来没问题,但HttpClient会自动处理URL编码,不过这里的参数都是合法字符,大概率不是这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:10:37