How to send an array using requests.post (Python)? “Value Error: Too many values to unpack”

前端 未结 4 1794
暖寄归人
暖寄归人 2020-12-13 01:52

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 unpac

相关标签:
4条回答
  • 2020-12-13 02:32

    Always remember when sending an array(list) or dictionary in the HTTP POST request, do use json argument in the post function and set its value to your array(list)/dictionary.

    In your case it will be like:

    r = requests.post(url, headers=headers, json=data)

    Note: POST requests implicitly convert parameter's content type for body to application/json.

    For a quick intro read API-Integration-In-Python

    0 讨论(0)
  • 2020-12-13 02:49

    Well, It turns out that all I needed to do was add these headers:

    headers = {'Content-Type': 'application/json', 'Accept':'application/json'}
    

    and then call requests

    requests.post(url,data=json.dumps(payload), headers=headers)
    

    and now i'm good!

    0 讨论(0)
  • 2020-12-13 02:51

    I have a similar case but totally different solution, I've copied a snipped of code which looks like that:

        resp_status, resp_data = requests.post(url, headers=headers, 
                                                    json=payload,  verify=False) 
    

    and this resulted in error :

    ValueError: too many values to unpack (expected 2)
    

    just assigning to one variable resolve the issue:

                response = requests.post(url, headers=headers, 
                                                  json=payload,  verify=False)
    
    0 讨论(0)
  • 2020-12-13 02:52

    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.

    0 讨论(0)
提交回复
热议问题