如何在Python requests中以相同的键发送多个值?
requests.post(url, data={'interests':'football','interests':'basketball'})
我试过这个,但它没有成功。我该怎么在 interests
字段里发布 football
和 basketball
呢?
5 个回答
0
在Python的requests库中,如果你想用同一个键发送多个值,就需要用到列表。比如,下面的代码会把“足球”和“篮球”这两个值发送到“兴趣”这个字段:
import requests
url = "https://example.com/post"
data = {"interests": ["football", "basketball"]}
response = requests.post(url, data=data)
这样就会生成一个这样的POST请求:
POST /post HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
interests=football&interests=basketball
1
curl 命令的字符串格式是 -d 'product_ids[]=719&product_ids[]=107'
。我通过添加方括号成功地形成了数据数组:
payload = [('product_ids[]', id) for id in ids_list]
response = requests.post(url, data=payload, headers=headers)
3
直接引用自文档:
数据参数可以为每个键提供多个值。这可以通过将数据设置为一个包含元组的列表,或者一个值为列表的字典来实现。当表单中有多个元素使用相同的键时,这种方式特别有用:
>>> 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
14
可以把 urllib3._collections.HTTPHeaderDict
当作一个字典来用,这个字典的每个键下面可以有多个值:
from urllib3._collections import HTTPHeaderDict
data = HTTPHeaderDict()
data.add('interests', 'football')
data.add('interests', 'basketball')
requests.post(url, data=data)
90
字典的键 必须 是唯一的,也就是说你不能重复使用同一个键。如果你需要重复的键,可以用一系列的键值对来代替,然后把这些传给 data
:
requests.post(url, data=[('interests', 'football'), ('interests', 'basketball')])
另外,你也可以把 data
字典里的值设置为 列表;列表中的每个值可以作为一个单独的参数来使用:
requests.post(url, data={'interests': ['football', 'basketball']})
下面是一个向 http://httpbin.org 发送 POST 请求的示例:
>>> 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']}