作者:伤心的辣条
主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。
发送HTTP请求的方法有很多,常用的工具就五花八门,如postman、Jmeter、Loadrunner等,但如果想和自动化代码结合起来,python的requests库必不可少,本文分享使用python发送HTTP请求及cookie和session相关内容。
Requests库介绍:
基于urllib,使用Python语言编写,采用Apache2 Licensed开源协议的HTTP库;和urllib库相比,Requests库更加方便。
(国外)安装方法一:
pip install requests
(国内)安装方法二:
pip install requests -i https://pypi.douban.com/simple/
Requests语法:
resp = requests.get(url='URL地址',headers={K:V},data={K:V},json={K:V},cookies=cookie数据[如:令牌])
# 其中:
# get()对应要发送的http请求方法,可根据实际情况修改为post、put、delete
# url:对应http请求行中的url
# headers:对应http请求的请求头。键值对格式{key:value}
# data:针对表单类型的 请求体。数据格式同上,也是键值对{key:value}
# json:针对json类型的 请求体。数据格式同上,也是键值对{key:value}
# cookies:存储的用户相关的信息
# resp:代表http请求发送成功后返回的响应包(响应行、响应头、响应体)
# 例:
import requests
# 导包
resp = requests.post(url='https://www.baidu.com',
# 填写url
headers={"Content-Type": "application/x-www-form-urlencoded"},
# 填写请求头
data={"username": "liuguoxing", "passwd": "123456"})
# 没有其它信息需求可以不携带,参数可选
print(resp.text)
# 打印文本格式的响应
print(resp.json())
# 打印json格式响应
Cookie的捕获和传递:
import requests
# 导包
resp = requests.get(url='http://xxxx')
# 请求url获取响应内容
my_cookie = resp.cookies
# 捕获cookie
resp_2 = requests.post(url='xxx', headers='xxx', data='xxx', cookies=my_cookie)
# cookie在两个请求之间的传递
print(resp_2.text)
# 打印第二个接口内容
# 不常用获取方法↓
'''
resp.url 获取URL
resp.status_code 获取状态码
resp.encoding 获取编码格式
resp.headers 获取响应头
resp.text 获取文本格式响应体数据
resp.content 获取字节码格式响应体数据
resp.json() 获取json格式响应体数据
'''
Cookie相关介绍:
cookie不是http协议自带,是工程师为了弥补http是无状态协议的这一特性而发明的技术。
cookie主要存在浏览器端(客户端),主要用来存储少量的用户不敏感信息。
cookie的默认大小是4K(可以扩展),存储数据量较小。
cookie中的数据,可以十分方便的获取到。因此,一般不用来存储重要敏感数据。
Cookie+Session认证方式:
上图以百度的访问请求为例,描述sessionID的传递过程,其中session ID经过哈希算法加密ID的部分已省略。
Session相关介绍:
Session 就是“会话”
Session 出现在计算机网络通信中,从浏览器与服务器建立连接开始,一直到与服务器断开连接,以上整个过程称之为一个“会话”。如:输入用户名、密码登录,产生会话——用户注销、退出、浏览器关闭,会话结束。
Session特性:
Session 不是http协议的一部分,也不是浏览器的一部分
Session的数据是保存在服务器端的
Session中可以保存的数据类型较为广泛,容量较大。(受服务器影响)
可以借助Session来管理cookie
通过Session管理cookie:
例子场景:先请求验证码获取接口,再将验证码接口返回的内容传递给登录接口
1、创建一个Session实例(类的对象)
2、使用Session实例调用验证码接口请求(GET)
3、使用同一个Session实例调用登录接口请求(POST)
4、请求发送结束需要关闭Session
1.my_session = requests.Session()
2.resp_verify = my_session.get(url='xxx')
3.resp_login = my_session.post(url='xxx',data='xxxx',headers='xxxx')
4.my_session.close()
# 通过session管理cookie可以不需要传递cookie,实现了自动传参
以上就是利用Requests发送HTTP请求以及利用session完成cookie的自动传递方法了,如有疑问欢迎评论区留言讨论~