如何使用requests.post(Python)发送数组?“Value Error: Too many values to unpack”。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (583)

我试图使用requests.post向WheniWorkAPI发送一个请求数组(列表),并且我一直得到两个错误中的一个。当我将列表作为一个列表发送时,我会得到一个解压缩错误,当我将它作为一个字符串发送时,我会收到一个错误,要求我提交一个数组。我认为这与请求处理列表的方式有关。以下是例子:

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}
提问于
用户回答回答于

事实上,我所需要做的就是添加这些标题:

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

而不是调用

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

现在我没事了!

用户回答回答于

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...

扫码关注云+社区

领取腾讯云代金券