使用aiohttp批量POST JSON数组请求获多响应,状态码却为单个200的疑问
为什么aiohttp发送列表请求能收到响应列表?
这不是aiohttp的特殊功能,而是JSON-RPC 2.0的批量请求标准,和aiohttp本身无关:
- aiohttp的
session.post(..., json=req)只是把你传入的Python序列(这里是列表)序列化为合法的JSON字符串,作为POST请求的Body发送给服务端,它并不关心这个JSON的具体结构——只要是能被json.dumps序列化的内容都可以传。 - 你的请求目标是以太坊节点,而以太坊节点实现了JSON-RPC 2.0的批量请求规范:当服务端收到一个JSON数组形式的请求时,会按顺序处理数组里的每个子请求,然后返回一个对应顺序的响应数组。
- 单个200状态码的原因:HTTP状态码表示的是整个请求的传输层面是否成功,即使批量请求里的某个子请求失败,HTTP状态码依然是200,失败的细节会体现在响应数组中对应位置的对象里(比如包含
error字段)。
简单说,aiohttp只是做了“传数据”的工作,真正处理批量请求逻辑的是以太坊节点遵循的JSON-RPC 2.0协议,所以aiohttp的文档不会提到这个场景——这属于上层应用协议的范畴,不是HTTP客户端的功能。
注意:不是所有API都支持这种批量请求,只有明确实现了JSON-RPC 2.0批量规范的服务端才能正确处理数组格式的请求。
内容的提问来源于stack exchange,提问作者DimaA6_ABC
相关产品推荐
相关产品推荐

