0
点赞
收藏
分享

微信扫一扫

接口测试 — 使用Requests库发送POST请求

POST请求用于向服务器提交数据,比如提交一个表单新建一个用户、或修改一个用户信息等操作。

对于POST请求,我们可以通过浏览器开发者工具或者其他外部工具来进行抓包,得到请求的URL、请求头(request headers)以及请求的表单data信息,这三样恰恰是我们用Requests库模拟POST请求时需要的。

关于请求头的配置和GET请求是一样的,都是定义headers属性即可。

而关于POST请求提交的参数,是和GET请求是不一样的。

post请求四种传送正文方式:

  • (1)请求正文是application/x-www-form-urlencoded。
  • (2)请求正文是multipart/form-data。
  • (3)请求正文是raw。
  • (4)请求正文是binary。

这四种提交数据的方式,是在请求头Content-Type属性中来定义。

1、请求正文是application/x-www-form-urlencoded
Reqeusts支持以application/x-www-form-urlencoded数据格式发送POST请求(标准的POST请求数据格式,默认),只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。

示例:

说明:

  • 发送的请求中,form属性接收了参数。
  • 在请求头中,Content-Type属性为application/x-www-form-urlencoded
  • 使用application/x-www-form-urlencoded格式发送数据,requests.post(url=url,
  • data=data)方法中一定要使用data变量来接收参数。
  • 换句话说数据格式是字典格式,使用data变量来接收,会默认发送application/x-www-form-urlencoded数据格式的POST请求。(也可以在请求头中明确一下Content-Type属性,但没必要。)

2、请求正文是raw

RAW的原意就是“未经加工”。换句话说RAW方式使用的是纯字符串的数据上传方式,所以在发送POST请求之前,可能需要手工的把一些JSON格式的数据转换成字符串的(加两单引号),在进行提交。

RAW数据格式的POST请求有两种:

  • 一种是xml格式文本(text/xml)。
  • 一种是json格式文本(application/json)。

(1)json格式文本(application/json)

说明:

  • 发送的请求中,json属性接收了参数。
  • 在请求头中,Content-Type属性为application/json。
  • 使用application/json格式发送数据,requests.post(url=url,
  • json=data)方法中一定要使用json变量来接收参数。
  • 换句话说数据格式是Json格式,使用json变量来接收,Requests会默认发送application/json数据格式的POST请求。(也可以在请求头中明确一下Content-Type属性,但没必要。)

注意:

(2)xml格式文本(text/xml)

说明:

  • text/xml格式相对用的少。
  • xml也可以作为一个文件来传输。
  • 需要重新声明请求头中Content-Type属性。
  • 其他和application/json一样。

3、正文是binary

使用binary格式的正文发送POST请求,是直接使用二进制流进行数据传输,多用于上传单个图片或图片。

也可以用于把请求的参数放入一个文件中,进行数据的提交。

示例如下:

说明:

  • 发送的请求中,files属性接收了参数。
  • 在请求头中,Content-Type属性为multipart/form-data。
  • 使用application/json格式发送数据,requests.post(url=url,
  • files=data)方法中一定要使用files变量来接收参数。
  • 换句话说Requests也支持发送binary数据形式的POST请求,只需将文件传给requests.post()方法的files参数即可。

4、请求正文是multipart/form-data

multipart/form-data数据格式的POST请求,多用于文件上传。

示例1:上传文件

示例2:上传文件并重命名

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

import requests
# hangge.png 为图片名称
files = {'file1': ('hangge.png', open('logo.png', 'rb'), 'image/png', {'Expires': '0'})}
response = requests.post('http://127.0.0.1:9999/post', files=files)
print(response.text)

示例3:多文件上传

"""

示例4:上传时附带其它参数

示例5:流式上传文件

  • 有时我们需要上传一个非常大的文件(比如 1G 左右),如果像上面的方式直接使用 Requests 提交,可能会造成内存不足而崩溃。
  • 所以发送大文件时还是建议将请求做成数据流。不过默认下 Requests 不支持流式上传,但有个第三方包 requests-toolbelt
  • 是支持的(本质还是 multipart/form-data 上传)
  • 在使用 requests-toolbelt 之前,我们首先通过 pip 进行安装:

示例如下:

5、总结Binary和Form-data区别


主要区别在于:

  • Binary只可以上传二进制数据,通常用来上传文件,由于没有键值,所以一次只能上传一个文件,而Form-data可以传多个。
  • Form-data既可以上传文件等二进制数据,也可以上传表单键值对。利用key-value对,可以分别对每个文件进行描述。

看完这篇内容后,相信以下两件事,也会对你的个人提升有所帮助:

1、 点赞,让更多人能看到这篇文章,同时你的认可也会鼓励我创作更多优质内容。

2、 让自己变得更强:想一想,如果你想在测试这个行业一直做下去,你的经验和测试技术是远远不够的,你需要进阶,你需要丰富你的技术栈!还等什么!

最后:【可能给予你助力的教程】

å¨è¿éæå¥å¾çæè¿° 

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

供 忠 郝 程序员木子 免费上方领取资料

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
 

 

举报

相关推荐

0 条评论