『居善地』接口测试 — 3、Requests库介绍
1、Requests库
Requests库是用Python语言编写,基于urllib3模块,采用Apache2 Licensed开源协议的 HTTP 库。
虽然Python的标准库中urllib3模块已经包含了平常我们使用的大多数功能,但是它的 API使用起来让人感觉不太友好。而Requests库使用的是urllib3,因此继承了它的所有特性,所以Requests库比urllib3使用更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。
Requests库支持HTTP 连接保持和连接池,支持使用cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL 和POST 数据自动编码。现代、国际化、人性化。
Requests库自称 “HTTP for Humans”(让HTTP服务于人类),说明使用更简洁方便。
Requests库是以 PEP 20 的箴言为中心开发的
- Beautiful is better than ugly.(美丽优于丑陋)
- Explicit is better than implicit.(直白优于含蓄)
- Simple is better than complex.(简单优于复杂)
- Complex is better than complicated.(复杂优于繁琐)
- Readability counts.(可读性很重要)
对于 Requests 所有的贡献都应牢记这些重要的准则。
简而言之:Requests库相当于Python中的“浏览器”,可以通过它进行网络请求、获取网页数据,功能强大而且特别好用。
说明PEP20:
PEP20是编写python
程序的指导准则,在python shell
中输入import this
就能看到是编写python
程序的指导准则,在python shell
中输入import this
就能看到,内容如下:
TIM Peters的python之禅
The Zen of Python, by Tim Peters
优美胜于丑陋。
Beautiful is better than ugly.
明确胜于隐晦。
Explicit is better than implicit.
简单胜于复杂。
Simple is better than complex.
复杂胜于难懂。
Complex is better than complicated.
扁平胜于嵌套。
Flat is better than nested.
留白胜于紧凑。
Sparse is better than dense.
可读性很重要。
Readability counts.
特例也并不能特殊到可以违背这些原则。
Special cases aren't special enough to break the rules.
虽然实用性胜于纯粹性。
Although practicality beats purity.
错误不应被默默地忽略。
Errors should never pass silently.
除非你明确地忽视。
Unless explicitly silenced.
面对歧义,不要尝试去猜测。
In the face of ambiguity, refuse the temptation to guess.
应该有一种,最好是仅有一种,明显的处理方式。
There should be one-- and preferably only one --obvious way to do it.
一开始那种方式并非显而易见,除非你是python之父。
Although that way may not be obvious at first unless you're Dutch.
做好过不做。
Now is better than never.
不假思索就动手还不如不做。
Although never is often better than *right* now.
如果实现很难解释,那就不是个好思路。
If the implementation is hard to explain, it's a bad idea.
如果实现易于解释,则可能是个好思路。
If the implementation is easy to explain, it may be a good idea.
命名空间是个绝妙的主意,我们要多多利用它。
Namespaces are one honking great idea -- let's do more of those!
2、Requests库文档
- 官方文档:https://requests.readthedocs.io/en/master/
- 中文文档:https://requests.readthedocs.io/zh_CN/latest/
- GitHub开源地址:https://github.com/psf/requests
3、Requests库安装
安装Requests库前提条件,需要安装python环境,然后在cmd命令行中输入python -m pip install requests(推荐)
或者pip install requests
即可。
如下图:
执行pip list
查看Requests库是否安装成功,和所安装的版本(默认安装最高版本。)
C:Users\ailin-L>pip list
Package Version
------- --------
certifi 2020.12.5
chardet 4.0.0
idna 2.10
pip 19.2.3
requests 2.25.1
selenium 3.141.0
setuptools 41.2.0
ur11ib3 1.25.9
4、Requests库的使用
(1)使用步骤
简单介绍一下Requests库步骤。
#1.导入requests库
import requests
#2.准备接口三要素
# 2.1 明确请求地址
url = "http://127.0.0.1:8000/api/departments/"
# 2.2 明确请求参数
# 2.3 发送请求+请求方式
response = requests.get(url=url)
# 查看返回值
print(response)
# 举例:
# 1.导入requests库
import requests
# 2.使用requests库
# 发送请求
response = requests.get('https://api.github.com/events')
# 查看结果
print(response.status_code)
print(response.headers['content-type'])
print(response.encoding)
print(response.json())
(2)示例练习
"""
1.学习目标
必须掌握requests库的基本使用
2.操作步骤
# 1.导入requests库
# 2.明确请求地址
# 3.明确请求参数
# 4.发送请求
3.需求
使用requests库来请求学生管理系统一查询所有学院接口
4.总结
返回值的获取
response.text # 获取返回值文本(将返回值以文本格式显示)
response.json() # 获取json格式的返回值,对于返回值类型为json格式比较友好
response.status_code # 获取状态码---HTTP协议响应状态码
response.headers # 获取响应头
response.content # 获取响应源码(多用于爬虫)
5.json和python转化
json.dumps(需要转换的python对象,indent=2,ensure_ascii=False)
indent 表示格式化输出时缩进
ensure_ascii=False 表示对非ascii字符不做转化
"""
# 1.导入requests库
import requests
import json
# 2.明确请求地址
url = "http://127.0.0.1:8000/api/departments/"
# 3.明确请求参数
# 没有参数不用写
# 4.发送请求
response = requests.get(url=url)
# print(response)
# 结果:<Response [200]>
# 5.获取返回值内容
res = response.json() # 会获得一个字典格式的对象
print(type(res)) # <class 'dict'>
# 6.python字典转换为json字符串
# 使用json库实现
# 将python对象转换为json字符串
result = json.dumps(res, indent=2, ensure_ascii=False)
print(type(result)) # 字符串类型<class 'str'>
print(result)
# json.loads() # 将json字符串转换为python对象
"""
结果:(简略,有17个,只展示两个,看看格式即可)
{
"count": 17,
"next": null,
"previous": null,
"results": [
{
"dep_id": "T02",
"dep_name": "Java_2学院",
"master_name": "Java-Master",
"slogan": "java"
},
{
"dep_id": "T03",
"dep_name": "Java_3学院",
"master_name": "Java-Master",
"slogan": "java"
}
}
"""
5、补充:Json数据和Python对象互相转化
Python3 中可以使用 Json模块来对 JSON 数据进行编解码,它主要提供了四个方法: dumps
、dump
、loads
、load
。
(1)dump
方法和dumps
方法说明:
dump
方法和dumps
方法对Python
对象进行序列化,将一个Python
对象进行JSON
格式的编码。
json.dumps(obj, *,
skipkeys=False,
ensure_ascii=True,
check_circular=True,
allow_nan=True,
cls=None,
indent=None,
separators=None,
default=None,
sort_keys=False,
**kw)
说明dumps
方法中常用的几个参数:
obj
:表示是要序列化的对象。ensure_ascii
:默认值为True
,用来控制生成的JSON字符串的编码,能将所有传入的非ASCII字符转义输出。如果ensure_ascii
为False
,保持原有编码,则这些字符将按原样输出。indent
:可以用来控制JSON字符串的换行和缩进效果,默认值为None
。
如果indent
是非负整数或字符串,那么JSON数组元素和对象成员将使用该缩进级别进行输入;
indent
为0、负数或“”
仅插入换行符;
indent
使用正整数缩进多个空格;
如果indent
是一个字符串(例如“\t”),则该字符串用于缩进每个级别。sort_keys
:默认值为False
,如果sort_keys
为True
,则字典的输出将按键值排序。
其他参数看源码即可,源码中对dumps
方法中的每个参数都有详细的说明。
(2)load
方法和loads
方法说明:
load
方法和loads
方法对Python
对象进行反序列化方法,将JSON
格式数据解码为Python
对象。
json.loads(s, *,
encoding=None,
cls=None,
object_hook=None,
parse_float=None,
parse_int=None,
parse_constant=None,
object_pairs_hook=None,
**kw):
说明loads
方法中常用的几个参数:
s
:将s(包含JSON文档的str
,bytes
或bytearray
实例)反序列化为Python对象。encoding
:指定一个编码的格式。
其他参数看源码即可,源码中对loads
方法中的每个参数都有详细的说明。
注意:如果进行反序列化(解码)的数据不是一个有效的
JSON
文档,将会引发JSONDecodeError
异常。
(3)Python对象与 Json数据类型转换:
Python对象转Json数据:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int-&float-derived emuns | number |
True | true |
False | false |
None | null |
Json数据转Python对象:
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
『居善地』接口测试 — 3、Requests库介绍的更多相关文章
- 『居善地』接口测试 — 4、Requests库发送GET请求
目录 1.使用Requests库发送带参数的GET请求 2.查看GET请求的内容 3.带请求头.参数的Get请求 Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求. ...
- 『居善地』接口测试 — 5、使用Requests库发送POST请求
目录 1.请求正文是application/x-www-form-urlencoded 2.请求正文是raw (1)json格式文本(application/json) (2)xml格式文本(text ...
- 『居善地』接口测试 — 7、Requests库使用proxies代理发送请求
目录 1.代理的了解 2.代理的分类 (1)正向代理 (2)反向代理 (3)总结 3.Requests库使用代理 4.总结 1.代理的了解 在上图中我们可以把Web server看成是Google服务 ...
- 『居善地』接口测试 — 6、Httpbin服务介绍
目录 1.Httpbin服务介绍 2.在Windows系统中部署Httpbin服务 3.在Linux系统中部署Httpbin服务 4.Httpbin访问方式 5.Httpbin常用调试接口 6.总结: ...
- 『居善地』接口测试 — 13、Moco框架的使用
目录 1.Moco框架第一个练习 2.Get方法的Mock实现 3.Post方法的Mock实现 4.请求中加入Cookies 5.请求中加入Header 6.Moco模拟重定向 7.综合练习 8.总结 ...
- 『居善地』接口测试 — 12、Moco框架介绍
目录 1.Mock功能介绍 2.Moco框架介绍 3.Moco框架在接口测试中的作用 4.Moco框架的优点 5.Moco框架的下载与启动 (1)Moco框架的下载 (2)Moco框架的启动 1.Mo ...
- 『居善地』接口测试 — 11、接口签名sign原理
目录 1.什么是加密以及解密? 2.加密方式的分类 (1)对称加密 (2)非对称加密 (3)总结: 3.接口签名sign原理 (1)什么是接口签名? (2)为什么需要做接口签名 (3)接口签名的实践方 ...
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『政善治』Postman工具 — 11、Postman中对Cookie的操作
目录 1.关联接口说明 2.测试关联接口实现步骤 3.补充:Postman中将请求转换成代码 上一篇文章说明了Postman中关于Cookie的相关操作,还是以Cookie举例,来说明下一在Postm ...
随机推荐
- 18. vue-router案例-tabBar导航
目标: 做一个导航tabbar 一. 分析 我们的目标是做一个导航tabbar, 要求 这个导航不仅可以在一个页面使用, 可以在多个页面通用 每个页面的样式可能不一样 每个页面的图标, 文字可能不一样 ...
- JS实现环绕地球飞行的3D飞行线动画效果(JS+HTML)
1.项目介绍 JS+HTML实现绕地球飞行的3D飞行线动画效果,且3D地球可以随意拖动和滑动缩放,画面中心是蓝色地球,地球表面上的两点连线之间有光电随机出现沿着抛物线轨迹3D飞行,可使用较好的浏览器打 ...
- matlab mashgrid 函数
meshgrid 有三种语法,用来生成三维网格矩阵或二维网格矩阵 [X,Y] = meshgrid(x,y) , x和y 都是一维数组,如x=[1:3]; y= [4:5]; 则生成的 X 和 Y 都 ...
- 如何保证Redis的高并发和高可用?
就是如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了,redis高可用 redis高并发:主从 ...
- shell 使用 cat 配合 EOF 创建文件并写入多行内容
之前折腾 GtiHub Actions 想实现提交 issue 后将 issue 的内容生成一个 Markdown 文件提交到仓库,从而实现自动发布到 GitHub Pages 的目的.倒是有一些现成 ...
- (十七)VMware Harbor 垃圾清理
1. 在线垃圾清理 注意:从Harbor中删除镜像时不释放空间,垃圾收集是通过从清单中不再引用文件系统中删除blob来释放空间的任务. 注意:在执行垃圾收集时,Harbor将进入只读模式,并且禁止对d ...
- Day13_67_interrupt() 方法
interrupt() 方法 中断线程 * interrupt()方法的简单理解 - interrupt() 方法只是改变线程的阻塞状态而已,让一个正在阻塞状态的线程,恢复执行.但是它不会中断一个正在 ...
- Day05_26_Overide_方法重写
Overide_方法重写 * 什么是方法重写(Overide)? - 方法重写也叫方法覆盖 ,重写是指子类对父类所允许访问的方法的实现过程进行重新编写, 返回值类型和形参都不能改变.即外壳不变,核心重 ...
- Mybatis(一)Porxy动态代理和sql解析替换
JDK常用核心原理 概述 在 Mybatis 中,常用的作用就是讲数据库中的表的字段映射为对象的属性,在进入Mybatis之前,原生的 JDBC 有几个步骤:导入 JDBC 驱动包,通过 Driver ...
- 什么是响应式web设计
什么是响应式web设计 现在开发一个产品,基本上都会需要兼顾 PC端和 移动端. 一般有两种思路: 1.为每个终端做一个特定的版本,并给2级域名,根据终端环境调用不同的版本代码. 2.一个网站能够兼容 ...