Python接口测试- requests 发送 post 请求的几种方法

本文详细介绍了POST请求与GET请求的区别,重点讲解了Content-Type的重要性,展示了如何在requests库中发送不同格式的数据,如x-www-form-urlencoded和JSON,并以登录示例说明如何处理。同时提及了在软件测试面试中的资源分享。
摘要由CSDN通过智能技术生成
前言:

POST 请求用于向服务器发送数据。与 get 相比更安全,同时 post 请求一般会带来数据的更改。

GET 请求不论我们怎么构造,最终都是通过 URL 向服务器传递数据,而 post 通过消息体(报文主体)发送请求。

在发送 post 请求的时候,我们需要关注一下 HTTP 请求的头部信息,特别是

Content-Type

这是用来告诉服务器请求中包含的数据类型。这会影响服务器如何提取数据。

常见的

Content-Type

如下:

  1. application/x-www-form-urlencoded
    这是最常见的数据类型,通常表明请求的数据类型是键值对类型,也就是页面 form 表单数据,如:

    username=nemo&password=123456
  1. application/json
    这意味着请求的数据类型是 Json 格式的数据:

    {"username":"nemo", "password":"123456"}

  1. multipart/form-data
    multipart/form-data 通常用于上传文件。

  2. application/xml
    这表明数据格式为 xml 格式。

前两种是较为常见的数据类型,一般默认情况下都是使用

application/x-www-form-urlencoded

在 requests 的 post 请求中以此为默认的数据类型。

由于之前提供的免费 API 中 post 请求基本上都没法使用,我们还是采用之前在 postman 中使用过的过的  showdoc 小项目中的登录为例,来演示如何发送 post 请求。

首先,我们先登录后抓包:

image

通过抓包可以获取到我们需要的数据:

  • 请求 url

  • content-type:application/x-www-form-urlencoded

  • 请求报文数据:username=showdoc&password=123456&v_code=

     
      
    1. import requests

    2. url = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 以字典的形式构造数据data = {

    3. 'username': 'showdoc',

    4. 'password': '123456'}# 与 get 请求一样,r 为响应对象r = requests.post(url, data=data)# 查看响应结果print(r.json())

由于 requests 默认以 content-type:application/x-www-form-urlencoded 发送 post 请求,所以这里我们不需要特殊处理。

同样,我们可以通过响应对象 r 查看请求和响应中的其他内容:

查看实际的请求数据:

print(r.request.body)## username=showdoc&password=123456

查看响应中的 cookie:

print(r.cookies)## <RequestsCookieJar[<Cookie cookie_token=...1b4181689f for 127.0.0.1/>]>

这里的 cookie 是服务端返回的,会用在后续的请求中,如果需要获取:

print(r.cookies.get('cookie_token'))## 2e7afd2de4dfdab4187b3587f6d532654f854b14f91b4181689f0ddd2fdfa0b9

发送 json 格式的数据

requests 默认使用 form 表单的形式发送数据,那如果服务器要求使用 json 格式呢?

有两种方法可以处理:

  1. 修改请求头部,传入自定义的 content-type

  2. 通过参数 json 传递数据

修改请求头部:

 
  1. import requests

  2. url = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 注意这里必须以json字符串构造数据data = '''

  3. {

  4. "username": "showdoc",

  5. "password": "123456"

  6. }

  7. '''headers = {'content-type': 'application/json'}# 与 get 请求一样,r 为响应对象r = requests.post(url, data=data, headers=headers)# 查看响应结果print(r.json())# 查看请求头部print(r.request.headers)## 你可以看看 content-type 字段

直接使用 json 参数

 
  1. import requests

  2. url = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 这里依然以字典的形式构造数据data = {

  3. 'username': 'showdoc',

  4. 'password': '123456'}# 与 get 请求一样,r 为响应对象r = requests.post(url, json=data)# 查看响应结果print(r.json())# 查看请求头部print(r.request.headers)## 你可以看看 content-type 字段

使用 json 参数传递,除了会增加 content-type 为

 application/json 

外,还会将 data 字典自动编码为 json 格式。

而如果我们自定义 content-type 的方式还需要自己将数据构造成 json 格式的数据

所以 ,明显直接使用第二种方式更方便,所以强烈推荐直接用第二种方式。

当然如果涉及到非 form 和 json 格式的数据,就必须要用第一种方式自己构造 content-type 了。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值