使用aiohttp调用FTX提现API时遇“Missing parameter coin”错误求助
解决FTX提现请求返回"Missing parameter coin"错误
你用aiohttp发起FTX提现请求时,尽管签名和请求数据逻辑正确,但服务器返回"Missing parameter coin"错误,核心原因是请求体格式未被服务器正确解析。
问题分析
你的代码中使用data=json.dumps(data)传递请求体,但aiohttp默认会将这类字符串请求体识别为application/x-www-form-urlencoded格式,而FTX提现API要求接收application/json格式的请求体,导致服务器无法从请求中解析出coin等参数。
修复方案
有两种简单的修复方式:
方案1:使用aiohttp的json参数直接传递字典
aiohttp的post方法提供了json参数,传入字典后会自动序列化为JSON字符串,并设置Content-Type: application/json请求头,无需手动处理:
async def main(coin, amount, address, method): # 传入的参数为TRX, 0.01, TXKbit45oBWoJHcE25NQPYhsHV5P8EqJvN, trx ts = int(time.time() * 1000) data = { "coin": coin, # TRX "size": amount, # 0.01 "address": address, # TXKbit45oBWoJHcE25NQPYhsHV5P8EqJvN "method": method # trx } signature_payload = f'{ts}POST/api/wallet/withdrawals{json.dumps(data)}'.encode() signature = hmac.new(API_SECRET.encode(), signature_payload, 'sha256').hexdigest() headers = { "FTX-KEY": API_KEY, "FTX-TS": str(ts), "FTX-SIGN": signature } async with aiohttp.ClientSession() as session: withdrawal = await session.post( "https://ftx.com/api/wallet/withdrawals", headers=headers, json=data # 改用json参数传递字典 ) print(await withdrawal.text())
方案2:手动设置Content-Type请求头
如果坚持使用data参数传递JSON字符串,需要在请求头中明确添加Content-Type: application/json:
headers = { "FTX-KEY": API_KEY, "FTX-TS": str(ts), "FTX-SIGN": signature, "Content-Type": "application/json" # 新增指定内容类型 } # 请求代码保留原写法 withdrawal = await session.post( "https://ftx.com/api/wallet/withdrawals", headers=headers, data=json.dumps(data) )
补充优化
建议使用async with管理ClientSession,无需手动调用close(),代码更简洁且能确保会话正确关闭。
内容的提问来源于stack exchange,提问作者Lone
相关产品推荐
相关产品推荐

