前言

requests 是 Hooks 即钩子方法,用于在某个框架固定的某个流程执行是捎带执行(钩上)某个自定义的方法。
requests 库只支持一个 response 的钩子,即在响应返回时可以捎带执行我们自定义的某些方法。
可以用于打印一些信息,做一些响应检查或想响应对象中添加额外的信息

使用示例

requests 库只支持一个 response 的钩子,即在响应返回时可以捎带执行我们自定义的某些方法.

# 作者-上海悠悠 微信/QQ交流:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/
import requests
url = 'https://httpbin.org/get'def response_status(resopnse, *args, **kwargs):print('url', resopnse.url)resopnse.status = 'PASS' if resopnse.status_code < 400 else 'FAIL'res = requests.get(url, hooks={'response': response_status})
print(res.status)

执行结果

url https://httpbin.org/get
PASS

重写响应内容

我们在做接口自动化测试的时候,有时候会遇到响应的内容是加密的内容,需要对返回的内容先解密再输出加密后的内容,这样方便断言
以下是requests 库的 Response 部分源码

class Response:"""The :class:`Response <Response>` object, which contains aserver's response to an HTTP request."""__attrs__ = ["_content","status_code","headers","url","history","encoding","reason","cookies","elapsed","request",]

可以自己定义一个NewResponse类,重写几个属性和方法

# 作者-上海悠悠 微信/QQ交流:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/
import requestsdef decrypt_response(response, *args, **kwargs):# print(response.text) 原始数据class NewResponse:text = '{"code": 0, "data": {"token": "yo yo"}}'  # response.text解密history = response.historyraw = response.rawis_redirect = response.is_redirectcontent = b'{"code": 0, "data": {"token": "yo yo"}}'  # response.text解密elapsed = response.elapsed@staticmethoddef json():# 拿到原始的response.json() 后解码return {"code": 0, "data": {"token": "yo yo"}}return NewResponseurl = "https://www.cnblogs.com/yoyoketang/"
r = requests.get(url, hooks={"response": decrypt_response})
print(r.text)
print(r.content)
print(r.json())

运行结果

{"code": 0, "data": {"token": "yo yo"}}
b'{"code": 0, "data": {"token": "yo yo"}}'
{'code': 0, 'data': {'token': 'yo yo'}}

调用多个函数

response 可以调用多个hook函数

import requestsdef print_url(r, *args, **kwargs):"""钩子函数1"""print("raw_url "+r.url)def change_url(r, *args, **kwargs):"""钩子函数2"""r.url = 'http://change.url'print("changed_url "+r.url)return r  # 其实没有这句话,也可以修改r.url,因为r是response对象而非普通数值,但requests官方似乎误认为回调函数一定要有return才能替换传入的数据url = 'http://httpbin.org/get'
response = requests.get(url, hooks=dict(response=[print_url, change_url]))
print("result_url "+response.url)

运行结果

raw_url http://httpbin.org/get
changed_url http://change.url
result_url http://change.url

全局会话hook

设置全局会话hook机制

url = "https://www.cnblogs.com/yoyoketang/"s = requests.Session()
s.hooks.update({"response": decrypt_response})
r = s.get(url)
print(r.text)
print(r.content)
print(r.json())

这样只需在session会话中添加hook机制,后面的请求都会自动带上了

比较遗憾的是,只提供了一个response对象的hook机制, 没法对请求对象设置hook

python接口自动化44- requests 库使用 hook 机制相关推荐

  1. Python接口自动化之requests请求封装

    ------·今天距2021年253天·------ 这是ITester软件测试小栈第114次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之Token详解及应用,介绍tok ...

  2. Python接口自动化之logging日志

    VOL 122 11 2020-05 今天距2021年234天 这是ITester软件测试小栈第122次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  3. Python接口自动化之pymysql数据库操作

    VOL 120 06 2020-05 今天距2021年239天 这是ITester软件测试小栈第120次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  4. Python接口自动化之数据驱动

    VOL 118 01 2020-05 今天距2021年244天 这是ITester软件测试小栈第118次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  5. Python接口自动化之动态数据处理

    VOL 135 15 2020-06 今天距2021年199天 这是ITester软件测试小栈第135次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  6. Python接口自动化之接口依赖

    VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  7. Python接口自动化之logging封装及实战

    VOL 124 15 2020-05 今天距2021年230天 这是ITester软件测试小栈第124次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  8. Python接口自动化之yaml配置文件

    VOL 119 04 2020-05 今天距2021年241天 这是ITester软件测试小栈第119次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  9. Python接口自动化之登录接口测试

    VOL 117 29 2020-04 今天距2020年246天 这是ITester软件测试小栈第117次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  10. Python接口自动化之unittest单元测试

    ------·今天距2021年251天·------ 这是ITester软件测试小栈第115次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之requests请求封装,主要通 ...

最新文章

  1. 直播|人大高瓴周骁:时空大数据与智慧城市前沿
  2. Java8 Stream 使用
  3. java学习笔记之折半查找法(二分法)
  4. 升级win10的理由
  5. Unity C# 设计模式(一)单例模式
  6. 奥的斯服务器状态显示,奥的斯电梯调试服务器(俗称st)按键介绍
  7. 层次分析法AHP - 代码注释多 - ( 数据建模 Python代码)
  8. 实战HTML5与CSS3 第一篇】初探水深,美丽的导航,绚丽的图片爆炸!!
  9. express学习 - (1)环境配置与第一个express项目
  10. 形象描述oracle是如何工作的--有点意思
  11. (7) PyQt 设计并实现【工厂扫码装箱系统】- Python代码实现BarTender自动化打印条码标签
  12. 基于深度学习的银行卡号识别
  13. 怎么设置计算机键盘数字键,电脑右边的数字键不能用怎么办_电脑右边数字键盘用不了的修复方法...
  14. 批量将txt文件转为csv文件
  15. Studio One2023中文版支持视频配乐加歌词音轨功能
  16. 10套苹果CMS模板打包下载/苹果CMS视频影视网站源码下载
  17. vue3+ts实现todolist功能
  18. mac 竖屏显示屏鼠标无法从显示器移到mbp上
  19. 微信公众平台推数据统计功能 商业价值可量化
  20. CPU到计算机刷新速度,计算机CPU运算速度是多少

热门文章

  1. linux下 启动MySql服务 重启MySql服务 查看服务状态 MySql服务开机自启动
  2. springboot返回,修改http状态码
  3. uni-app微信小程序支付
  4. 虎牙直播视频下载方法分享地瓜网络技术
  5. A股2017十大TOP10,大数据榜单透视A股赚钱基因!
  6. iPhone恢复出厂设置如何操作?数据误删如何恢复?
  7. 富爸爸股票投资入门到精通,知识卡片笔记分享
  8. 民族表演艺术类毕业论文文献包含哪些?
  9. ffmpeg视频合并、添加背景音乐命令整理
  10. 文字记录 七十二家房客人物当中有趣的角色