码迷,mamicode.com
首页 > 其他好文 > 详细

post请求

时间:2017-09-27 22:30:13      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:ocs   元组   传递   tor   ref   html   enc   pen   span   

 POST 请求

通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

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

>>> r = requests.post("http://python123.io/ws/demo.html", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

你还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效:

>>> payload = ((key1, value1), (key1, value2))
>>> r = requests.post(‘http://python123.io/ws/demo.html, data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key1": [
      "value1",
      "value2"
    ]
  },
  ...
}

很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个 string 而不是一个 dict,那么数据会被直接发布出去。

例如,Github API v3 接受编码为 JSON 的 POST/PATCH 数据:

>>> import json

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

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

此处除了可以自行对 dict 进行编码,你还可以使用 json 参数直接传递,然后它就会被自动编码。这是 2.4.2 版的新加功能:

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

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

POST一个多部分编码(Multipart-Encoded)的文件

Requests 使得上传多部分编码文件变得很简单:

>>> url = http://httpbin.org/post
>>> files = {file: open(report.xls, rb)}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "<censored...binary...data>"
  },
  ...
}

你可以显式地设置文件名,文件类型和请求头:

>>> url = http://httpbin.org/post
>>> files = {file: (report.xls, open(report.xls, rb), application/vnd.ms-excel, {Expires: 0})}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "<censored...binary...data>"
  },
  ...
}

如果你想,你也可以发送作为文件来接收的字符串:

>>> url = http://httpbin.org/post
>>> files = {file: (report.csv, some,data,to,send\nanother,row,to,send\n)}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "some,data,to,send\\nanother,row,to,send\\n"
  },
  ...
}

如果你发送一个非常大的文件作为 multipart/form-data 请求,你可能希望将请求做成数据流。默认下 requests 不支持, 但有个第三方包 requests-toolbelt 是支持的。你可以阅读 toolbelt 文档来了解使用方法。

在一个请求中发送多文件参考 高级用法 一节。

警告

我们强烈建议你用二进制模式(binary mode)打开文件。这是因为 Requests 可能会试图为你提供 Content-Length header,在它这样做的时候,这个值会被设为文件的字节数(bytes)。如果用文本模式(text mode)打开文件,就可能会发生错误。

post请求

标签:ocs   元组   传递   tor   ref   html   enc   pen   span   

原文地址:http://www.cnblogs.com/StaYWARM/p/7604198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!