如何在aioHTTP的GET请求中传递请求体?
问题解答
aioHTTP支持在GET请求中传递请求体,但你当前的代码写法有误,导致和requests的行为不一致。
问题原因
- requests的
json参数:会将传入的字典序列化为JSON字符串,放在请求体中发送,同时自动设置Content-Type: application/json请求头。 - aiohttp的
params参数:是用来将字典转换为URL的查询参数(即?key1=value1&key2=value2形式),并非放在请求体里,这和你用requests的逻辑完全不同。
修正后的aioHTTP代码
将params=json替换为json=json,就能和requests的行为保持一致:
import asyncio import aiohttp async def main(): json_payload = { "type": { "id": 2 }, "dut": { "hardware": { "mac_address": mac_address } } } async with aiohttp.ClientSession() as session: async with session.get( f"{settings.RM_BASE_URL}/audit/events", json=json_payload ) as resp: print(resp.status) print(await resp.text()) asyncio.run(main())
补充说明
虽然HTTP规范里不推荐GET请求携带请求体,但很多服务器框架都支持这种用法,只要你的后端服务能正确解析GET请求的请求体,上面的代码就能正常工作。
内容的提问来源于stack exchange,提问作者wwwwwwww
相关产品推荐
相关产品推荐

