我需要在python上发布请求,有很多参数。我有一个关键'名称'和许多值。我尝试使用requests
库。请求应该是这样的:
requests.post('http://mysite.cc/name=val1&name=val2&name=val3')
name
有超过100个值。文档说我可以发送params
的词典,如{'name': 'val1', 'name': 'val2', 'name': 'val3'}
。但我真的不明白如何使用一个键dict
和值列表创建name
。
答案 0 :(得分:3)
您可以使用列表作为值:
params = {'name': ['val1', 'val2', 'val3', 'val4']}
response = requests.get(url, params=params)
并将其作为name=val1&name=val2&name=val3
添加到网址。
请注意,params
参数用于指定网址参数,即?
问号后面的网址部分。这通常用于 GET 请求,但您也可以将其与POST一起使用。
如果您需要将POST主体中的参数作为application/x-www-form-urlencoded
正文发送,请改为使用data
:
params = {'name': ['val1', 'val2', 'val3', 'val4']}
response = requests.post(url, data=params)
使用http://httpbin.org进行演示:
>>> import requests
>>> from pprint import pprint
>>> params = {'name': ['val1', 'val2', 'val3', 'val4']}
>>> url = 'http://httpbin.org/get'
>>> response = requests.get(url, params=params)
>>> pprint(response.json())
{u'args': {u'name': [u'val1', u'val2', u'val3', u'val4']},
u'headers': {u'Accept': u'*/*',
u'Accept-Encoding': u'gzip, deflate, compress',
u'Connection': u'close',
u'Host': u'httpbin.org',
u'User-Agent': u'python-requests/2.2.1 CPython/2.7.6 Darwin/13.2.0',
u'X-Request-Id': u'2fb6d325-308a-4669-a791-73666ac0d298'},
u'origin': u'84.92.98.170',
u'url': u'http://httpbin.org/get?name=val1&name=val2&name=val3&name=val4'}
>>> url = 'http://httpbin.org/post'
>>> response = requests.post(url, data=params)
>>> pprint(response.json())
{u'args': {},
u'data': u'',
u'files': {},
u'form': {u'name': [u'val1', u'val2', u'val3', u'val4']},
u'headers': {u'Accept': u'*/*',
u'Accept-Encoding': u'gzip, deflate, compress',
u'Connection': u'close',
u'Content-Length': u'39',
u'Content-Type': u'application/x-www-form-urlencoded',
u'Host': u'httpbin.org',
u'User-Agent': u'python-requests/2.2.1 CPython/2.7.6 Darwin/13.2.0',
u'X-Request-Id': u'473e4e2d-e125-45b8-9697-b93b23ec2eca'},
u'json': None,
u'origin': u'84.92.98.170',
u'url': u'http://httpbin.org/post'}