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

Python脚本POST请求遇401 Unauthorized(提示token过期)问题求助

问题分析与解决方案:POST请求401认证失败(Token有效但提示过期)

核心问题

你的POST请求中Authorization头的Token格式错误,导致服务器无法正确解析Token,进而返回"token is expired"的错误提示(实际并非Token过期,而是格式不符合要求)。

错误原因

在POST请求的headers定义中,你使用了str({access_token}):

'Authorization': 'Bearer '+str({access_token})

这会将原本的Token字符串(比如eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...)转换为字典格式的字符串,最终Authorization头会变成:

Bearer {'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'}

服务器无法识别这种格式的Token,因此返回认证失败的错误。

修正代码

将str({access_token})改为str(access_token),同时注意POST请求的参数传递方式(因为你设置了Content-Type: application/json,应该用json参数而非data参数):

gcURL = 'https://URL/rest/v1/usergroups'
data = {
        "name": 'Test Group',
        "description": 'Test Group',
        "project": 20755
        }
headers = {
            'accept': 'application/json',
            'Content-Type': 'application/json',
            'Authorization': 'Bearer '+str(access_token)  # 去掉多余的花括号
          }
gcresponse = requests.post(
             gcURL,
             headers=headers,
             json=data  # 改用json参数传递数据,匹配Content-Type要求
            )
gcresult = gcresponse.json()
print(gcresult)
print(gcresponse.status_code)

额外注意事项

  • 确保Token的权限范围包含创建用户组的操作,部分API会对不同请求类型(GET/POST)设置差异化权限;
  • 若使用JWT格式Token,可直接解析确认其实际过期时间,排除真过期的可能;
  • 避免重复定义同名变量(比如两次定义headers),虽不影响功能,但会增加后续维护成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:17:02