requests如何构造复杂的post请求?

乙醇 创建于 8 个月 之前

最后更新时间 2018-09-11

默认情况下,在post方法中使用 data 关键字参数,Requests的行为会表现的像是在发送一个html表单,比如

>>> payload = {'key1': 'value1', 'key2': 'value2'}

>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

如果需要为多个元素使用同一key的话,可以在data中传入元组,比如

>>> payload = (('key1', 'value1'), ('key1', 'value2'))
>>> r = requests.post('http://httpbin.org/post', data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key1": [
      "value1",
      "value2"
    ]
  },
  ...
}

如果 data 中传的是string而不是dict的话,那么字符串将会被直接发送出去

>>> import json

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

>>> r = requests.post(url, data=json.dumps(payload))

因为现在很多api接受json字符串格式的post data,Requests为这种方式提供了更简单的写法

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

>>> r = requests.post(url, json=payload)

我要留言

暂无评论