首页 > 编程语言 >python接口自动化44- requests 库使用 hook 机制

python接口自动化44- requests 库使用 hook 机制

时间:2022-11-29 22:13:09浏览次数:46  
标签:status yo python 44 hook url print requests response

前言

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 a
    server'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 requests


def decrypt_response(response, *args, **kwargs):
    # print(response.text) 原始数据

    class NewResponse:
        text = '{"code": 0, "data": {"token": "yo yo"}}'  # response.text解密
        history = response.history
        raw = response.raw
        is_redirect = response.is_redirect
        content = b'{"code": 0, "data": {"token": "yo yo"}}'  # response.text解密
        elapsed = response.elapsed

        @staticmethod
        def json():
            # 拿到原始的response.json() 后解码
            return {"code": 0, "data": {"token": "yo yo"}}

    return NewResponse


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

标签:status,yo,python,44,hook,url,print,requests,response
From: https://www.cnblogs.com/yoyoketang/p/16936869.html

相关文章

  • 进入python的世界_day41_数据库——视图、触发器、事务、存储过程、函数、索引(未搞定,
    一、在pycharm中运行mysql编写登录注册功能1.注册​ 先用navicat建立一张表,比如就ID主键,姓名,密码这三个字段建立表#pycharm代码实操#1.还是先导入模块,创建pymysql的......
  • python四十四期---
    昨日内容回顾多表查询的两种方式连表操作 innerjoin leftjoin rightjoin ps:所需结论来自于多张表的字段建议使用连表子查询 将SQL语句括号括起来当做另外......
  • python打印99乘法表
    #使用while嵌套循环打印99乘法表#外层循环表示行i=1whilei<=9:j=1whilej<=i:#\t表示对其,end=""表示不换行print(f"{j}*{i}={i*j}\t"......
  • Python之垃圾回收机制
    什么是垃圾回收    当为一个变量分配数据的时候,python会在内存中分配一部分空间,用户储存此数据,但内存空间总是有限的,如果一直占用内存空间,内存迟早会溢出,所以,程序中需......
  • Python之八大数据类型
    数据类型之整型int与浮点型float整型也就是int型其实就是整数如:print(type(10))浮点型就是float其实就是小数如:print(type(10.0))#这里需要注意:10.0也......
  • Python常见部分内置方法与操作
    Python常见内置方法与操作整型int类型转换int(其它数据类型),但只支持数字类型和小数类型>>>num1=input('Yourage>>>:')Yourage>>>:18>>>print(type(num1)......
  • python之路38 SQL注入问题 索引触发器 事务 存储过程 函数 流程控制
    SQL注入问题怪像1:输对用户名就可以登录成功怪像2:不需要对的用户名和密码也可以登录成功SQL注入:利用特殊符号的组合产生特殊的含义从而避开正常的业务逻辑select......
  • 从零开始学Python【37】--朴素贝叶斯模型(理论部分)
    【知识铺垫】在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式:如上等式为条件概率的计算公式,表示在已知事件A的情况下事......
  • rfc3442-classless-static-routes 字段含义
    参考文档:https://www.nuomiphp.com/serverfault/zh/60480e758726d95932321906.html#dhcp配置optionrfc3442-classless-static-routescode121=arrayofinteger......
  • build a python env on ubuntu20.04
    buildapythonenvonubuntu20.04fixvirtualenvwarpper(Ubuntu20.04安装virtualenv方法以及安装过程中遇到的问题处理)[https://blog.csdn.net/qq_42296146/article/d......