You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:05:26