Python中使用多个参数的POST请求

-2 投票
1 回答
5864 浏览
提问于 2025-04-18 17:04

我需要在Python中发送一个POST请求,里面有很多参数。我有一个键叫做'name',但是有很多很多的值。我尝试使用requests这个库。这个请求应该是这样的:

requests.post('http://mysite.cc/name=val1&name=val2&name=val3')

对于name,我有超过100个值。文档上说我可以发送一个字典(dict),格式像这样:{'name': 'val1', 'name': 'val2', 'name': 'val3'}。但是我真的不明白怎么创建一个只有一个键name和一系列值的字典。

1 个回答

4

你可以用一个 列表 来存放这些值:

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'}

撰写回答