Requests教程-5-发送post请求

上一小节中,我么已经掌握了requests发送get请求的方法,本小节我们讲解一下requests的post请求的使用方法。

首先我们需要了解一下requests.post方法的源码,代码如下:

def post(url, data=None, json=None, **kwargs):
    r"""Sends a POST request.

    :param url: URL for the new :class:`Request` object.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    return request("post", url, data=data, json=json, **kwargs)

上图所示post方法有4个入参,1个return函数,返回一个request方法的调用。

url:代表接口请求的url

data: 一般代表表单数据即字典格式,也可以是json/xmL等文本格式

json: 请求数据为json格式

**kwargs:代表接口请求可选参数,是一种key-value键值对参数,比如在接口请求中添加请求头信息headers="xxxx"

HTTP 协议规定 post请求提交的数据必须放在消息主体中,而post请求正文的传送方式有以下4种类型:
(1)application/x-www-form-urlencoded
(2)multipart/form-data
(3)raw
(4)binary

接下来我们针对以上四种类型,分别举例子来讲解。

(1)请求正文是application/x-www-form-urlencoded

这种类型实际上是以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可,示例如下

# 导入 requests包
import requests
url = "https://httpbin.org/post"
# 设置请求头
headers = {'Content-Type':'application/x-www-form-urlencoded'}
r = requests.post(url=url,data={'key1':'value1','key2':'value2'},headers=headers)
print(r.text)

(2)请求正文是multipart/form-data
除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为multipart/form-data,示例如下

# 需提前安装requests_toolbelt库, pip install requests_toolbelt
from requests_toolbelt import MultipartEncoder
# 导入 requests包
import requests
# 需要上传文件,如本地的file.py文件
m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
    )

r_file = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
print(r_file.text)
# 不需要文件
m = MultipartEncoder(fields={'field0': 'value', 'field1': 'value'})

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
print(r.text)

(3)请求正文是raw

raw代表上传任意格式的文本,可以上传text、json、xml、html等,示例如下

import json
import requests

url = "https://httpbin.org/post"
# 设置请求头
headers = {'Content-Type': 'text/xml'}
# 传入xml格式文本
r_xml = requests.post(url=url, data='<?xml  ?>', headers=headers)
print(r_xml.text)

# 传入json格式文本,有两种方法,1、使用data,2、使用json参数
# 使用data参数
r_data = requests.post(url=url,data=json.dumps({'key1':'value1','key2':'value2'}),headers={'Content-Type':'application/json'})
print(r_data.text)
# 使用json参数
r_json = requests.post(url=url,json=json.dumps({'key1':'value1','key2':'value2'}),headers={'Content-Type':'application/json'})
print(r_json.text)

(4)请求正文是binary

binary也常用文件上传接口,它和multipart/form-data上传文件的区别是,binary一次只能上传一个文件,multipart/form-data可以上传多个,还有binary使用的是files参数,示例如下

import requests

url = "https://httpbin.org/post"
# 设置请求头
headers = {'Content-Type': 'text/xml'}
# 比如上传本地文件file.py,使用files参数
r = requests.post(url=url, files={'file': open('file.py', 'rb')}, headers={'Content-Type': 'binary'})
print(r.text)

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值