requests.post(url, data={'interests':'football','interests':'basketball'})
Я пробовал это, но это не работает. Как разместить football
и basketball
в поле interests
?
requests.post(url, data={'interests':'football','interests':'basketball'})
Я пробовал это, но это не работает. Как разместить football
и basketball
в поле interests
?
Ключи словаря должны быть уникальными, их нельзя повторять. Вместо этого вы должны использовать последовательность кортежей ключ-значение и передать это 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']}
files
здесь, если вы необходимы отправить составной запрос/форму, и вы должны строго контролировать порядок полей и у вас есть фактические данные файла для отправки. В противном случае просто используйте data=(('worker_ids[]', '66'), ('worker_ids[]', '67'))
.
- person Martijn Pieters; 02.02.2021
Можно использовать urllib3._collections.HTTPHeaderDict
как словарь с несколькими значениями под ключом:
from urllib3._collections import HTTPHeaderDict
data = HTTPHeaderDict()
data.add('interests', 'football')
data.add('interests', 'basketball')
requests.post(url, data=data)
Цитата из документов:
Аргумент данных также может иметь несколько значений для каждого ключа. Это можно сделать, сделав данные либо списком кортежей, либо словарем со списками в качестве значений. Это особенно полезно, когда в форме есть несколько элементов, использующих один и тот же ключ:
>>> 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