IT業務効率化

pythonのrequestsでcurl –dataと同じことをする

結論から

curl -X GET https://example.com/api/sample -H "key: hirayuki" -H "Content-Type: application/json" --data '{"id": 1}'

これを真似したければ、

headers = {"key": hirayuki, "Content-Type": "application/json; charset=utf8"}
payload = '{"id": 1}'
response = requests.get(URL, headers = headers, data = payload)
return response.json()["data"][0]["customerNumberForecasts"]

こう記述します。

curl –dataの真似をrequestsで試みて500

curl -X GET https://example.com/api/sample -H "key: hirayuki" -H "Content-Type: application/json" --data '{"id": 1}'

これをPythonコード上で実行したかったことがありました。

-H はheaderで、–dataはデータを送信できるしファイルも送信できるとのことです。

https://qiita.com/aosho235/items/d89bb027db0c5662d8c5

これを真似しようしたPythonコードがこれです。

headers = {"key": hirayuki, "Content-Type": "application/json; charset=utf8"}
payload = '{"id": 1}'
response = requests.get(URL, headers = headers, params = payload)
return response.json()["data"][0]["customerNumberForecasts"]

ただ、これで500エラーが返ってきてしまい、どうやってもうまくいきませんでした。

–dataをrequestsでやるときはdata

公式のドキュメントにあるように

例: httpbin.org/get?key=val 。 Requestsは、 params キーワード引数を使って、辞書としてこれらの引数を渡すことができます。

ということでparamsはGETメソッドに記載するパラメータを受け渡すためのものです。

一方data引数を使うときは

一般的にHTMLのフォームのようにエンコードしたデータを送信したい場合

などだそうです。(詳細

そのため、curlの–dataで渡しているデータはdata引数で渡します。

headers = {"key": hirayuki, "Content-Type": "application/json; charset=utf8"}
payload = '{"id": 1}'
response = requests.get(URL, headers = headers, data = payload)
return response.json()["data"][0]["customerNumberForecasts"]

これで500エラーは解消し、200で返ってきました。

ABOUT ME
hirayuki
今年で社会人3年目になります。 日々体当たりで仕事を覚えています。 テーマはIT・教育です。 少しでも技術に親しんでもらえるよう、noteで4コマ漫画も書いています。 https://note.mu/hirayuki