目录

前言:

发送 json 格式的数据


前言:

 想了解更多相关知识请关注我吧!或者点击这里领取全套【软件测试/自动化测试】海量资料免费领取

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

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

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

Content-Type

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

常见的

Content-Type

如下:

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

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

    {"username":"nemo", "password":"123456"}
  3. multipart/form-data
    multipart/form-data 通常用于上传文件。

  4. 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=

import requestsurl = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 以字典的形式构造数据data = {'username': 'showdoc','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 传递数据

修改请求头部:

import requestsurl = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 注意这里必须以json字符串构造数据data = '''
{"username": "showdoc","password": "123456"
}
'''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 参数

import requestsurl = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 这里依然以字典的形式构造数据data = {'username': 'showdoc','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 了。

  1. 好了 学习也就先到这里了 想了解更多相关知识请关注我吧!或者点击这里领取全套【软件测试/自动化测试】海量资料免费领取

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

  1. php发送post请求的三种方法

    这篇文章主要介绍了php发送post请求的三种方法,分别使用curl.file_get_content.fsocket来实现post提交数据,需要的朋友可以参考下 class Request{ pub ...

  2. Python 技术篇-requests发送post请求传文件给flask服务端报405、400问题解决方法

    这是我 flask 服务端的一块代码,可以看到有个 methods=['GET', 'POST'],如果没有这个参数,发送请求就会报 405,因为默认能只接收到 get 请求,接收不到 post 请求 ...

  3. Python 使用requests发送POST请求

    一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行  请求报头  消息主体 HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码 ...

  4. Python 使用requests发送POST请求总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/junli_chen/article/details/53670887 一个http请求包括三个部分, ...

  5. php发请求的方法,php发送http请求的几种方法

    有很多时候,我们还是需要用php去发送http请求的,它可以模拟浏览器的行为,通常它的应用场景有:1.后端测试自己的接口.2.后端请求别人的数据. 后端测试自己的接口,比如我们写了一个返回json数据 ...

  6. Ajax向后端发送PUT请求的两种方法

    文章目录 一.将POST请求修改为PUT请求 二.直接发送PUT请求 一.将POST请求修改为PUT请求 通过HiddenHttpMethodFilter过滤器将POST请求修改为PUT请求 需要传入 ...

  7. python post请求实例_Python使用requests发送POST请求实例代码

    本文研究的主要是Python使用requests发送POST请求的相关内容,具体介绍如下. 一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行 请求报头 消息主体 ...

  8. Python 使用 Scrapy 发送 post 请求的坑

    From:https://www.jb51.net/article/146769.htm 使用 requests 发送 post 请求 先来看看使用requests来发送post请求是多少好用,发送请 ...

  9. requests发送post请求的一些疑点

    requests发送post请求的一些疑点 前言 在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法.一般是发送GET请求或者POST请求,对于GET请求没有什么好说的,而 ...

最新文章

  1. 打开word出现“您正试图运行的函数包含有宏或需要宏语言支持的内容。”的解决方法
  2. 智能+制造,聪明的公司都走上了智能制造的道路
  3. 果断收藏!一张版图带你摸清全球10大自动驾驶联盟布局
  4. 查看linux系统性能
  5. Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站
  6. java 切换后台程序_将 Android 程序切换到后台及从后台切换到前台实现
  7. EMNLP'21 | Dialogue System 对话系统
  8. 阿里巴巴常用的12个后端开发工具
  9. 仿高德地图点亮城市html,高德地图怎么点亮城市_高德地图点亮城市教程_3DM手游...
  10. 百度地图API仿链家地图找房 聚合开发 js实现
  11. 怎样保存html视频,网页上的视频怎么保存到电脑 网页视频保存到电脑的步骤教程...
  12. ESXi 6.7 CVE-2018-3646警告的处理
  13. Mac 程序员的十种武器
  14. 一个精美的登录界面原来是这样做的
  15. 中国科学院大学计算机考研好考吗,中国科学院大学考研难吗?一般要什么水平才可以进入?...
  16. PTA 7-113 用switch语句编程百分制成绩转换为五分制成绩
  17. EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式
  18. mysql迅_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...
  19. 微信小程序-自定义导航栏及返回上一级页面的实现
  20. 抽奖滚动效果 python_Python使用Tkinter实现滚动抽奖器效果

热门文章

  1. Flash游戏存档文件 .sol文件替换+拷贝教程 附sol Editor下载
  2. Day80.Redis 事物、乐观|悲观锁、秒杀、持久化{RDB|AOF}、主从复制、集群
  3. NR polar Code 三 极化内核(克罗克内积)
  4. POJ 1164 放苹果 经典的组合问题
  5. 设计模式9——迭代器和组合模式
  6. 恒源云_Gpushare.com | 不懂Linux,不配深度学习?
  7. 记一次Oracle 19c redo误删除的故障恢复 [ORA-00742 ORA-00312 没有归档]
  8. SpringBoot注解详解
  9. Form表单控件与浮动
  10. 初步使用TensorFlow