无法将正在运行的CURL PUT语句转换为正常运行的python脚本

时间:2016-12-15 16:03:17

标签: python curl

这是我正在尝试放入python脚本的工作curl语句:

curl -L -H 'X-Cisco-Meraki-API-Key: <key>' -X PUT -H'Content-Type: application/json' --data-binary '{"name":"new SSID name", "enabled":true, "authMode":"psk", "encryptionMode":"wpa", "psk":"abcd1234", "ipAssignmentMode":"Bridge mode"}' 'https://dashboard.meraki.com/api/v0/networks/[networkId]/ssids/[number]'

这是我的python代码。

import requests
import json

url = "https://dashboard.meraki.com/api/v0/networks/XXXXXXX/ssids/2"
headers = {'X-Cisco-Meraki-API-Key': 'YYYYYYY', 'content-type': 'application/json'}
payload = {"name":"test", "enabled":"true", "authMode":"psk", "encryptionMode":"wpa", "psk":"abcd1234", "ipAssignmentMode":"NAT mode"}

r = requests.put(url, headers=headers, data=payload, allow_redirects=True)

print r.status_code

当我运行curl命令时,它可以工作,但是当我尝试python脚本时,我收到400错误消息。我的猜测是它与应用程序解释有效负载的方式有关。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要使用:

data=json.dumps(payload)

而不是:

data=payload

当您添加'content-type': 'application/json'标题时,表示您发送json data,这就是您需要使用json.dumps()发送valide json数据的原因而不是Python dictionary / object