Cisco ISE:“资源初始化失败:无效JSON:当前令牌不是结束对象”

2024-10-03 02:33:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望在Cisco ISE中执行PUT操作,以使用Python更改现有的网络设备描述。为了实现这一点,您必须以XML或JSON的形式发送一个有效负载,其中包含要在其上执行PUT操作的网络设备。在我的例子中,我使用的是JSON。这是我的密码:

import requests
import pprint
import urllib3
import json
from requests.auth import HTTPBasicAuth

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

url = 'https://X.X.X.X:9060/ers/config/networkdevice/ze5abe60-918k-14pq-402x-01507619wf2l'
username = 'username'
password = 'password'
headers = {"Content-type": "application/json", "Accept": "application/json"}
valid_cert = False

payload = {
    "NetworkDevice": {
        "id": "ze5abe60-918k-14pq-402x-01507619wf2l",
        "name": "TESTDEVICE",
        "description": "YAY IT WORKS",
    },
    "profileName": "Cisco",
    "coaPort": 0,
    "link": {
        "rel": "self",
        "href": "https://X.X.X.X:9060/ers/config/networkdevice/ze5abe60-918k-14pq-402x-01507619wf2l",
        "type": "application/json"
    },
    "NetworkDeviceIPList": [{
        "ipaddress": "X.X.X.X",
        "mask": 32
    }]
}

response = requests.request("PUT", url, data=json.dumps(payload), headers=headers, verify=valid_cert,
                            auth=HTTPBasicAuth(username, password))
result = response.json()
pprint.pprint(result)

此Python代码返回以下内容:http响应400和以下http错误:

 {'ERSResponse': {'operation': 'PUT-update-networkdevice', 'messages':
 [{'title': "Resource Initialization Failed: Invalid JSON: Current
 token not END_OBJECT (to match wrapper object with root name
 'NetworkDevice'), but FIELD_NAME\n ", 'type': 'ERROR', 'code':
 'Application resource validation exception'}], 'link': {'rel':
 'related', 'href':
 'https://X.X.X.X:9060/ers/config/networkdevice/ze5abe60-918k-14pq-402x-01507619wf2l',
 'type': 'application/xml'}}}

研究官方Cisco API文档中的“错误”'code': 'Application resource validation exception'"(从上面)只会得出APPLICATION_RESOURCE_VALIDATION_EXCEPTION在资源语义验证不满足要求时发生”。这加上http响应,向我表明问题在于我的JSON负载

Cisco TAC/support建议:配置文件名称和;网络设备IP列表-有效载荷字段是必需的…尽管我不确定是否同意,因为官方API文档中没有提到这一点

此外,我还使用 https://jsonlint.com/

这似乎是正确的。我也尝试过改变: data=json.dumps(有效负载)-在实际请求中,仅数据=有效负载…没有成功

请告知! 谢谢


Tags: httpsimportconfigjsonapplicationputtyperequests