【python自动化框架搭建】requests模块封装和应用(第20天课堂笔记)

import json

import requests

# 创建一个HandleRequest类
class HandleRequest:
    """
    处理请求
    """
    # 创建一个构造方法,one_session自动保存会话信息
    def __init__(self):
        self.one_session = requests.Session()

    def add_headers(self,headers):
        """添加公共请求头"""
        self.one_session.headers.update(headers)

    # 添加send方法,专门用来发起请求,定义封装的参数三种形默认式
    # 默认请求方法:POST,默认参数格式:json格式
    def send(self,url,method="post",data=None,is_json=True,**kwargs):
        # data = '{"name"="hc","gender":true}'  # json格式的字符串
        # data = "{"name"="hc","gender":True}"  # 字典类型的字符串
        # isinstance用来判断第一个字符串类型的,如果是,返回True,不是返回false
        if isinstance(data,str):
            try:
                # 对传递参数用json.loads进行格式转换,将JSON格式的参数转换为python中的字典格式或者嵌套字典的列表
                data = json.loads(data)
            # 如果参数不是json格式的字符串,为字典格式执行以下代码
            except Exception as e:
                print("使用日志器来记录日志")
                # 使用eval格式进行转换,保证两种格式的数据,都能进行转换
                data = eval(data)
        # 将所有请求方法转换为小写
        method = method.lower()
        if method == "get":
            # res = self.one_session.get(method,url,params=data,**kwargs)
            # params查询字符串参数
            res = self.one_session.request(method,url,params=data,**kwargs)
        elif method in ("post","put","delete","patch"): # 有请求体
            if is_json:         # 如果is_json为True,那么以json格式的形式来传参
                # res = self.one_session.post(url,json=data,**kwargs)
                res = self.one_session.request(method,url,json=data,**kwargs)
            else:               # 如果is_json为False,那么以www-form的形式来传参
                # res = self.one_session.post(url, data=data, **kwargs)
                res = self.one_session.request(method,url,data=data,**kwargs)
        else:
            res = None
            print("不支持【{}】请求方法".format(method))
        return res

    def close(self):
        self.one_session.close()


if __name__ == "__main__":
    # 1、构造请求的url:登录
    login_url = "XXXXXXXXXXXXXXXX"
    # 2、充值
    recharge_url = "XXXXXXXXXXXXXX"

    # 2、创建请求参数
    headers = {
        "X-Lemonban-Media-Type": "XXXXXX",
        "User-Agent": "Moilla/5.0 leo"
    }

    login_params = {
        "mobile_phone": "13888888836",
        "pwd": "123456789"
    }

    # 3、执行登录
    do_request = HandleRequest()        # 创建HandRequest对象
    do_request.add_headers(headers)     # 添加公共请求头

    # 通过对象发起请求,获取response响应报文
    login_res = do_request.send(login_url,method="post",data=login_params,is_json=True)
    # 将response响应体的数据转换为字典,赋值给json_datas
    json_datas = login_res.json()
    # 取出响应报文的id值
    member_id = json_datas["data"]["id"]
    # 取出响应报文中的token
    token = json_datas["data"]["token_info"]["token"]

    # 4、创建请求参数,body值
    recharge_params = {
        "member_id": member_id,
        "amount":"50000",
    }
    # 字符串拼接需要传递的token参数
    token_header = {"Authorization": "Bearer " + token}
    # 请求头中添加token
    do_request.add_headers(token_header)

    # 5、执行充值
    recharge_res = do_request.send(recharge_url,data=recharge_params)
    pass

猜你喜欢

转载自www.cnblogs.com/python-test001/p/12537263.html
今日推荐