EOSFlare API get_actions接口调用报错:pos参数类型不符问题咨询及解决方案
解决EOSFlare API get_actions接口的类型错误问题
我之前对接EOS相关API时也碰到过类似的类型校验问题,你的情况其实是请求数据的格式没处理对导致的。
问题原因
当你使用requests.post()的data参数传递字典时,requests默认会把数据编码成application/x-www-form-urlencoded(表单提交格式),这时候你的数字30和5会被自动转换成字符串类型传递给API。而EOSFlare的get_actions接口对pos和offset参数的校验要求是数字类型,所以就触发了($.pos: "30") ✖ (type: number)的错误。
解决方案
只需要把请求数据以JSON格式发送给API即可,requests提供了两种简单的方式:
方式一:直接使用json参数(推荐)
requests的json参数会自动将字典序列化为JSON字符串,同时设置正确的Content-Type: application/json请求头,非常方便:
import requests # Requests: HTTP for Humans url = "https://api.eosflare.io/v1/eosflare/get_actions/" data = {"account_name": "yupcreators1", "pos":30, "offset":5} # 用json参数替换原来的data参数 r = requests.post(url, json=data) print(r.status_code) print(r.encoding) print(r.text)
方式二:手动序列化并设置请求头
如果你需要更灵活地控制请求头,可以手动用json.dumps()序列化数据,然后设置Content-Type头:
import requests import json url = "https://api.eosflare.io/v1/eosflare/get_actions/" data = {"account_name": "yupcreators1", "pos":30, "offset":5} headers = {"Content-Type": "application/json"} r = requests.post(url, data=json.dumps(data), headers=headers) print(r.status_code) print(r.encoding) print(r.text)
这两种方式都能保证pos和offset以数字类型传递给API,满足接口的校验要求,应该就能解决你遇到的错误了。
内容的提问来源于stack exchange,提问作者Matteo Pinna
相关产品推荐
相关产品推荐

