api - 在 python 中运行 PUT 请求时出现错误 400

我有一个有效的 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=