私はrequests.postを使用してリクエストの配列(リスト)をWheniWork APIに送信しようとしていますが、2つのエラーのうちの1つを受け取り続けています。リストをリストとして送信すると、アンパックエラーが発生し、文字列として送信すると、配列の送信を要求するエラーが発生します。リクエストがリストを処理する方法と関係があると思います。以下に例を示します。
url='https://api.wheniwork.com/2/batch'
headers={"W-Token": "Ilovemyboss"}
data=[{'url': '/rest/shifts', 'params': {'user_id': 0,'other_stuff':'value'}, 'method':'post',{'url': '/rest/shifts', 'params': {'user_id': 1,'other_stuff':'value'}, 'method':'post'}]
r = requests.post(url, headers=headers,data=data)
print r.text
# ValueError: too many values to unpack
データの値を引用符で囲むだけです:
url='https://api.wheniwork.com/2/batch'
headers={"W-Token": "Ilovemyboss"}
data="[]" #removed the data here to emphasize that the only change is the quotes
r = requests.post(url, headers=headers,data=data)
print r.text
#{"error":"Please include an array of requests to make.","code":5000}
JSONエンコードデータを渡します。 APIドキュメント を参照してください:
要確認—すべての投稿本文はJSON形式のデータ(フォームデータなし)である必要があります。
requests
ライブラリを使用すると、これは非常に簡単になります。
headers = {"W-Token": "Ilovemyboss"}
data = [
{
'url': '/rest/shifts',
'params': {'user_id': 0, 'other_stuff': 'value'},
'method': 'post',
},
{
'url': '/rest/shifts',
'params': {'user_id': 1,'other_stuff': 'value'},
'method':'post',
},
]
requests.post(url, json=data, headers=headers)
json
キーワード引数を使用すると、データはJSONにエンコードされ、Content-Type
ヘッダーはapplication/json
に設定されます。
さて、私がする必要があるのは、これらのヘッダーを追加することだけでした:
headers = {'Content-Type': 'application/json', 'Accept':'application/json'}
その後、呼び出し要求
requests.post(url,data=json.dumps(payload), headers=headers)
そして今、私は元気です!
array(list)またはdictionaryをHTTP POSTリクエスト、post関数でjson argumentを使用して設定しますあなたのarray(list)/ dictionaryへの値。
あなたの場合、それは次のようになります:
r = requests.post(url、headers = headers、json = data)
注:POST要求は、ボディのパラメーターのコンテンツタイプを暗黙的にapplication/jsonに変換します。
簡単な紹介を読むには API-Integration-In-Python