如何在python请求中使用相同的键发布多个值?

时间:2014-04-30 09:20:07

标签: python python-requests

requests.post(url, data={'interests':'football','interests':'basketball'})

我尝试了这个,但它没有用。如何在football字段中发布basketballinterests

3 个答案:

答案 0 :(得分:42)

字典键必须是唯一的,你不能重复它们。您将使用一系列键值元组,并将其传递给data

requests.post(url, data=[('interests', 'football'), ('interests', 'basketball')])

或者,创建data字典列表的值;列表中的每个值都用作单独的参数条目:

requests.post(url, data={'interests': ['football', 'basketball']})

演示POST到http://httpbin.org

>>> import requests
>>> url = 'http://httpbin.org/post'
>>> r = requests.post(url, data=[('interests', 'football'), ('interests', 'basketball')])
>>> r.request.body
'interests=football&interests=basketball'
>>> r.json()['form']
{u'interests': [u'football', u'basketball']}
>>> r = requests.post(url, data={'interests': ['football', 'basketball']})
>>> r.request.body
'interests=football&interests=basketball'
>>> r.json()['form']
{u'interests': [u'football', u'basketball']}

答案 1 :(得分:6)

可以使用urllib3._collections.HTTPHeaderDict作为在键下具有多个值的字典:

from urllib3._collections import HTTPHeaderDict
data = HTTPHeaderDict()
data.add('interests', 'football')
data.add('interests', 'basketball')
requests.post(url, data=data)

答案 2 :(得分:0)

直接从docs报价:

数据参数还可以为每个键具有多个值。这个可以 通过使数据成为元组列表或字典来完成 列为值。当表单具有 使用同一键的多个元素:

>>> payload_tuples = [('key1', 'value1'), ('key1', 'value2')]
>>> r1 = requests.post('https://httpbin.org/post', data=payload_tuples)
>>> payload_dict = {'key1': ['value1', 'value2']}
>>> r2 = requests.post('https://httpbin.org/post', data=payload_dict)
>>> print(r1.text)
{
  ...
  "form": {
    "key1": [
      "value1",
      "value2"
    ]
  },
  ...
}
>>> r1.text == r2.text
True