使用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 Requestcloudflare
排查建议
- 检查请求
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
相关产品推荐
相关产品推荐

