How to send an array using requests.post (Python)? "Value Error: Too many values to unpack"
Full error message
I'm trying to send an array(list) of requests to the WheniWork API using requests.post, and I keep getting one of two errors. When I send the list as a list, I get an unpacking error, and when I send it as a string, I get an error asking me to submit an array. I think it has something to do with how requests handles lists. Here are the examples:
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
Simply wrapping the value for data in quotes:
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}Solutionsource: stackoverflow \u2197
You want to pass in JSON encoded data. See the API documentation: Remember — All post bodies must be JSON encoded data (no form data). The requests library makes this trivially easy: 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) By using the json keyword argument the data is encoded to JSON for you, and the Content-Type header is set to application/json.
API access
Get this solution programmatically \u2014 free, no authentication.
curl https://depscope.dev/api/error/55ca69f0643096cc066cd216f68d1cbfcea063b01bef1bf9ac9a12e9b2d17fd2hash \u00b7 55ca69f0643096cc066cd216f68d1cbfcea063b01bef1bf9ac9a12e9b2d17fd2