外部 API をいじっているときに、この問題に遭遇しました。本文データをディクショナリとしてリクエストに直接送信していたところ、400 エラーが発生していました。
data = {
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
}
json.dumps ラップを追加すると、次のように動作します。
data = json.dumps({
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
})
辞書と JSON オブジェクトは構文的に同一であるため、これが必要な理由が完全にはわかりません。ここで舞台裏で何が起こっているのかを理解するのを手伝ってくれる人はいますか?
完全を期すために、ここに私のヘッダーがあります:
headers = {'API-KEY': 'blerg', 'Accept-Encoding': 'UTF-8', 'Content-Type': 'application/json', 'Accept': '*/*', 'username': 'user', 'password': 'pwd'}
編集:
これについては以前は言及していませんでしたが、今では関連性があると感じています。私は Python Requests ライブラリを使用していますが、別の投稿では、パラメーターをリクエスト オブジェクトにエンコードする必要はないと示唆しているようです: https://stackoverflow.com/a/14804320/1012040
「GET/POST かどうかに関係なく、パラメーターを再度エンコードする必要はありません。引数として辞書を使用するだけでよいのです。」
シリアル化は必要ないようですか?
私のリクエストオブジェクト:
response = requests.post(url, data=data, headers=headers)