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
相关产品推荐
相关产品推荐

