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

使用Boost.Beast调用Kraken API AddOrder接口时遇400错误求助

使用Boost.Beast调用Kraken AddOrder接口返回400 Bad Request问题排查

我在C++中用Boost.Beast调用Kraken API的AddOrder接口,已经对请求体编码后传入req_.body(),但一直收到400 Bad Request错误。

相关请求信息

请求体原文:

nonce=1419646086&ordertype=limit&pair=XBTUSD&price=25000.000000&type=buy&volume=1.000000

编码后的请求体:

nonce%3D1419646086%26ordertype%3Dlimit%26pair%3DXBTUSD%26price%3D25000.000000%26type%3Dbuy%26volume%3D1.000000

请求端点确认正确:https://api.kraken.com/0/private/AddOrder,请求已包含API-Sign、API-Key等必要头信息,且签名在Postman中验证有效,但返回的错误响应如下:

raw response : HTTP/1.1 400 Bad Request
Server: cloudflare
Date: Tue, 27 Dec 2022 17:25:24 GMT
Content-Type: text/html
Content-Length: 155
Connection: close
CF-RAY: -

400 Bad Request
400 Bad Request

cloudflare

排查建议

  • 检查请求Content-Type头:Kraken私有接口要求Content-Type必须是application/x-www-form-urlencoded,如果Boost.Beast请求未设置该头,服务端无法解析请求体,会直接返回400。
  • 修正请求体编码逻辑:当前把=和&也做了URL编码是错误的。正确做法是仅对每个参数的键、值分别编码特殊字符,再用=拼接键值对、&拼接多个参数,最终请求体格式应和原文一致(除非参数值含特殊字符)。
  • 核对请求构建细节:确保请求方法是POST(Kraken私有接口仅支持POST);检查API-Sign生成逻辑,确认nonce递增、签名计算时包含了请求路径、nonce和请求体哈希,和Postman的生成逻辑完全一致。
  • 抓包对比请求差异:用抓包工具捕获Postman和Boost.Beast的完整请求,对比头信息、请求体、请求方法等细节,定位参数或格式差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:50:39