我一直在阅读有关使用 cURL here的 Cisco ACI 自动化的信息,并尝试遵循相同的步骤。
不幸的是,该代码不适用于cURL。我收到以下错误。
C:\>curl -X POST -k https://x.x.x.x/api/aaaLogin.json -d '{"aaaUser":{"attributes":{"name":"user007","pwd":"password007"}}}'
{"totalCount":"1","imdata":[{"error":{"attributes":{"code":"400","text":"JSON parsing failed - incomplete attribute value at line: 1"}}}]}
C:\>
但是,当我使用Postman测试相同的代码时,它的工作就像一种魅力。 curl命令出了什么问题?
注意:在此示例中,我没有放入-c cookie.txt
,因为即使出现错误,我也会遇到相同的错误。
所需的输出
获得正确的HTTP 200响应,而不是400错误请求..
答案 0 :(得分:1)
您需要先登录:
curl -X POST -k https://APIC_IP_ADDRESS/api/aaaLogin.xml -d '<aaaUser name="USERNAME" pwd="PASSWORD"/>' -c cookie.txt
APIC控制器返回存储在cookie中的令牌。它将持续5分钟。您必须使用此cookie来运行以下任何 REST API 。
例如 REST API ,它创建一个新的Tenat,一个新的应用程序配置文件和一个新的EPG,如下所示:
curl -b cookie.txt -X POST -k https://APIC_IP_ADDRESS/api/node/mo/uni.xml -d '<polUni> <fvTenant name="TENANT-NAME" descr="TENANT-NAME-DESC" status=""> <fvAp name="APP-PROF-NAME"> <fvAEPg name="NEW-EPG-NAME" > </fvAEPg> </fvAp> </fvTenant> </polUni>' -c cookie.txt
答案 1 :(得分:0)
您需要转义双引号(“)
C:\>curl -X POST -k https://x.x.x.x/api/aaaLogin.json -d '{\"aaaUser\":{\"attributes\":{\"name\":\"user007\",\"pwd\":\"password007\"}}}'
实际上,您甚至可以只对用户名和密码使用双引号:
C:\>curl -X POST -k https://x.x.x.x/api/aaaLogin.json -d '{aaaUser:{attributes:{name:\"user007\",pwd:\"password007\"}}}'
您需要转义\“的原因是因为curl在构造和发送POST消息时会删除它们。这是来自whireshark的捕获:whireshark capture