使用Python POST请求AWX API无法返回Token的问题
问题分析与解决
核心问题
你的Python请求存在两个关键问题,导致AWX API未正确识别POST请求的创建令牌意图:
- 使用
data参数传递字典,同时设置Content-Type: application/json头——data传字典时,requests会自动将其编码为application/x-www-form-urlencoded格式,和你声明的JSON格式冲突,API无法解析到创建令牌所需的POST数据,因此返回了该接口的GET结果(个人令牌列表)。 - 尝试
json=json.dumps(request_data)是错误用法——requests.post的json参数接受Python原生字典/列表对象,不需要手动json.dumps,手动序列化后传入会导致API收到嵌套的JSON字符串,依然无法正确解析。
正确代码写法
直接使用json参数传递原生Python字典,requests会自动处理JSON序列化和Content-Type头:
import requests request_data = {"description": "AWX CLI Token"} targeturl = f"{awx_url}/api/v2/users/{user_id}/personal_tokens" # 用json参数传原生字典,无需手动设置Content-Type response = requests.post(targeturl, verify=False, json=request_data, auth=(awx_user, awx_pass)) # 打印响应内容确认结果 print(response.json())
额外验证点
- 检查
awx_url和user_id的拼接结果,确保和curl/PowerShell中使用的URL完全一致。 - 如果需要手动设置请求头,无需重复指定
Content-Type: application/json,json参数会自动处理该头。
内容的提问来源于stack exchange,提问作者Pepi0
相关产品推荐
相关产品推荐

