Python调用Oanda API报INSTRUMENT_MISSING错误,Postman请求正常
问题分析
核心问题是错误地将序列化后的JSON字符串传给了Oanda v20库的API方法。Oanda的v20.Context下的接口方法(比如api.order.market)接受的data参数是Python字典,而非JSON字符串。当你传入JSON字符串时,库会错误处理请求体,导致API无法正确解析出instrument字段,从而返回INSTRUMENT_MISSING错误。
解决方案
移除json.dumps()的调用,直接将order.to_dict()生成的字典传给data参数:
修改后的market_order函数:
def market_order(order: MarketOrderRequest): api = v20.Context(config.hostname, config.port, token=config.token) # 直接传入字典,不需要手动序列化 response = api.order.market(account_id, data=order.to_dict()) print("Response: {} ({})".format(response.status, response.reason)) print_order_create_response_transactions(response)
补充说明
- Oanda v20 Python库内部会自动处理字典到JSON的序列化,以及设置正确的
Content-Type请求头。手动序列化后传入字符串,会破坏库的内部处理逻辑,导致请求体格式不符合API预期。 - 你在Postman中能成功,是因为Postman正确发送了JSON格式的请求体,而你的Python代码之前相当于发送了一个字符串形式的请求体,API无法识别其中的结构。
内容的提问来源于stack exchange,提问作者user26411319
相关产品推荐
相关产品推荐

