zl程序教程

您现在的位置是:首页 >  Python

当前栏目

API接口测试-使用python发送HTTP请求(Requests)

2023-02-18 16:28:32 时间

作者:伤心的辣条

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。

发送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的自动传递方法了,如有疑问欢迎评论区留言讨论~