我有一个有效的 curl 命令:
ip_address='<my ip address>'
sessionID='<got from post request metadata>'
curl --insecure --request PUT 'https://'$ip_address'/eds/api/context/records' -H 'Csrf-Token: nocheck' -H 'AuthToken:<token>' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"sessionId": "'$session_ID'", "replace":false}'
python 脚本如下所示:
headers_put = {
'Csrf-Token': 'nocheck',
'AuthToken': '<my token here>',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
url_put = "https://" + ip_address + "/eds/api/context/records"
data = {
"sessionId":"<session id got from POST request metadata>",
"replace":"false"
}
response = requests.put(url_put, headers=headers_put, data=data, verify=False)
print(response)
我得到的错误信息是:
<Response [400]>
b'Bad Request: Invalid Json'
知道我在这里做错了什么吗?任何帮助表示赞赏!
编辑:
这个错误是否会因为数据而导致:
print(data)
{'sessionId': '<session id received from post metadata>', 'replace': 'false'}
回答1
Http 状态 400 表示https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400所述的“错误请求”。您在 curl 语句中包含的 pyScript 中省略了 1 个请求标头(Csrf-token)。考虑包括它并重试脚本。
如果您仍然收到错误 - 您可以尝试(在您的脚本中)提取 4xx 响应的实际文本或 .body。它可以通过 python response
对象的 text
属性使用 response.apparent_encoding
访问(您可以确认内容类型)。最好的祝愿。
回答2
我找到了解决方案:
response = requests.put(url_put, headers=headers_put, json=data, verify=False)
而不是 data=
我们必须使用 json=