使用Python调用Autotask REST API创建工单返回401的原因排查
问题场景
Autotask新用户创建API用户时选择的位置为「Headquarters(总部)」,从Autotask对应配置页面获取到资源位置标识为“15”,参考配置截图:
。
使用如下Python代码调用Autotask REST API接口创建工单时,运行后返回的HTTP响应状态码为401:
import requests USERNAME = "xyz@abcsandbox.com" PASSWORD = "xyz123" TRACKING_IDENTIFIER = "XXXXXXXX" REST_URL = "https://webservices15.autotask.net/atservicesrest/v1.0/Tickets" headers = {'TrackingIdentifier': TRACKING_IDENTIFIER} response = requests.request(method='POST', url=REST_URL, headers=headers, data={"AccountId": "12345678", "ContactId": "0000001", "DueDateTime": "2021-03-20 00:01:00", "QueueId": "12345678", "Title": "Some title here", "Status": "21", "Priority": "3", "Source": "-2", "TicketType": "4", "IssueType": "21", "SubIssueType": "303", "Description": "Description of ticket", "AssignedResourceID": "12345678", "AssignedResourceRoleID": "23456789"}, auth=(USERNAME, PASSWORD), timeout=1200, verify=False) print(response.status_code)
触发401错误的可能原因
- 凭据信息不匹配:代码中填写的
USERNAME、PASSWORD与实际API用户信息不一致。Autotask API用户密码区分大小写,创建后重置密码未同步更新代码配置、误用无API访问权限的普通前台登录账号调用接口,都会直接触发鉴权失败。 - 认证密钥类型错误:Autotask REST API的API用户认证需使用专门生成的API密钥,而非用户登录前台的普通账号密码,误用普通登录密码会返回401。
- 接入节点地址错误:代码中使用的
https://webservices15.autotask.net域名与租户实际分配的API接入节点不匹配。即使资源位置标识为15,沙箱类特殊租户的接入节点也不一定遵循“webservices+位置标识数字”的拼接规则,节点不匹配会直接拦截请求返回401。 - 请求格式不符合接口规范:现有代码直接向
data参数传入字典,requests会默认以application/x-www-form-urlencoded表单格式发送请求,且未在请求头中添加Content-Type: application/json声明,部分版本的Autotask接口在请求格式不符合要求时会返回401状态码。 - 跟踪标识无效:请求头中
TrackingIdentifier填写的内容不是Autotask后台生成的有效API跟踪标识,会被接口鉴权逻辑拦截。 - API用户权限配置异常:创建的API用户处于未激活、禁用状态,或绑定的安全角色未开启REST API访问权限、未授予工单创建对应的操作权限,调用接口时会返回401。
内容的提问来源于stack exchange,提问作者owgitt
相关产品推荐
相关产品推荐

