使用Bash/Curl调用CoinEx API提交加密货币市价单出现400错误咨询
CoinEx API 市价单提交400错误排查
错误原因
- curl请求参数错误:
-X -POST多写了一个横杠,正确写法为-X POST,语法错误直接导致服务端无法识别请求类型 - 变量名调用错误:代码中定义交易对变量为
marketpair,但POST请求体中错误调用未定义的$market变量,导致交易对参数为空 - 签名生成错误:
md5sum命令默认输出会附带空格和-标识,仅需取前32位哈希值;且签名要求全大写,需要提前处理完成再传入请求头 - 请求头格式错误:authorization请求头的取值不需要额外包裹单引号,多余符号会导致服务端鉴权失败
- tonce取值格式错误:用jq取接口返回的时间戳时未加
-r参数,导致取到的数值带双引号,签名和请求参数中的tonce格式不符合要求 - 冗余参数问题:CoinEx市价单接口不需要传入
price参数,多余参数会触发参数校验失败 - VPN代理问题:报错日志显示请求实际发往127.0.0.1,说明VPN本地代理配置异常,curl请求没有正确转发到CoinEx服务端
修复后代码
#!/bin/bash # CoinEx 市价单提交脚本 access_id="XXXX" secret_key="XXXX" req_url="https://api.coinex.com/v1/order/market" amount="1.0" marketpair="DOGEUSDT" market_type="sell" # 取正确格式的13位毫秒时间戳 tonce=$(curl -s -X GET https://api.coinex.com/v1/market/ticker/all | jq -r .data.date) # 生成签名:拼接参数→MD5→转大写→仅取前32位 sign_raw="access_id=${access_id}&amount=${amount}&market=${marketpair}&tonce=${tonce}&type=${market_type}&secret_key=${secret_key}" authorization=$(echo -n "${sign_raw}" | md5sum | awk '{print $1}' | tr '[:lower:]' '[:upper:]') # 提交请求,可根据VPN代理情况补充--proxy socks5://127.0.0.1:你的代理端口 或者--noproxy "*"测试 curl -v \ -H "Authorization: ${authorization}" \ -H "Content-Type: application/json" \ -X POST \ -d '{ "access_id": "'${access_id}'", "amount": "'${amount}'", "market": "'${marketpair}'", "tonce": '${tonce}', "type": "'${market_type}'" }' \ ${req_url}
内容的提问来源于stack exchange,提问作者mehdi shokati
相关产品推荐
相关产品推荐

