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

Python使用aiohttp请求API返回invalid_client但http.client正常问题咨询

问题原因

两段代码的核心差异是授权参数的传递位置:

  • 正常运行的http.client代码,是把grant_type、client_id等所有授权参数放到POST请求的请求体中发送,完全符合OAuth2客户端凭证模式要求的application/x-www-form-urlencoded传参规则。
  • 报错的aiohttp代码,错误使用了params参数传递授权参数:aiohttp中params参数的作用是把参数拼接为URL的查询字符串(即URL中?后面的部分),并不会放到请求体里。服务端解析请求时只能从请求体中读取授权参数,读不到对应值就会返回invalid_client错误。

修复方案

把session.post方法里的params=params改为data=params即可,aiohttp会自动把字典格式的参数序列化为application/x-www-form-urlencoded格式的请求体,不需要额外手动设置Content-Type请求头。

修复后的核心代码示例:

async def get_token(self):
    params = {
        "grant_type": "client_credentials",
        "client_id": "123-123-123",
        "client_secret": "123123",
        "scope": "something something"
    }
    
    async with aiohttp.ClientSession() as session:
        async with session.post(
                url="https://something-api.com/connect/token",
                data=params) as response:
            return await response.json()

内容的提问来源于stack exchange,提问作者Jimmyt1988

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:18:00