仅供参考
github找的框架,基于他的代码做了一部分改动,下面着重代码的解析和一些其他的完善。记录下来主要用于后续自己再做改动。
import requests
import json as complexjson
from common.logger import loggerclass RestClient():def __init__(self, api_root_url):self.api_root_url = api_root_urlself.session = requests.session()def get(self, url, **kwargs):return self.request(url, "GET", **kwargs)def post(self, url, data=None, json=None,files=None, **kwargs):if files is not None:return self.request(url, "POST", data=data,files=files, **kwargs)else:return self.request(url, "POST", data=data, json=json,**kwargs)def put(self, url, data=None, **kwargs):return self.request(url, "PUT", data, **kwargs)def delete(self, url, **kwargs):return self.request(url, "DELETE", **kwargs)def patch(self, url, data=None, **kwargs):return self.request(url, "PATCH", data, **kwargs)def request(self, url, method, data=None, json=None,files=None, **kwargs):url = self.api_root_url + urlheaders = dict(**kwargs).get("headers")params = dict(**kwargs).get("params")#files = dict(**kwargs).get("params")cookies = dict(**kwargs).get("cookies")self.request_log(url, method, data, json, params, headers, files, cookies)if method == "GET":return self.session.get(url, **kwargs)if method == "POST":if files is not None:return self.session.post(url, data=data, files=files, **kwargs)else:return self.session.post(url, data=data, json=json, **kwargs)if method == "PUT":if json:# PUT 和 PATCH 中没有提供直接使用json参数的方法,因此需要用data来传入data = complexjson.dumps(json)return self.session.put(url, data, **kwargs)if method == "DELETE":return self.session.delete(url, **kwargs)if method == "PATCH":if json:data = complexjson.dumps(json)return self.session.patch(url, data, **kwargs)def request_log(self, url, method, data=None, json=None, params=None, headers=None, files=None, cookies=None,**kwargs):logger.info("接口请求地址 ==>> {}".format(url))logger.info("接口请求方式 ==>> {}".format(method))logger.info("接口请求头 ==>> {}".format(complexjson.dumps(headers, indent=4, ensure_ascii=False)))logger.info("接口请求 params 参数 ==>> {}".format(complexjson.dumps(params, indent=4, ensure_ascii=False)))logger.info("接口请求体 data 参数 ==>> {}".format(complexjson.dumps(data, indent=4, ensure_ascii=False) if data else 'None'))logger.info("接口请求体 json 参数 ==>> {}".format(complexjson.dumps(json, indent=4, ensure_ascii=False) if json else 'None'))if files:logger.info("接口上传附件 files 参数 ==>> {} (file names and types)".format([f for f in files.keys()]))else:logger.info("接口上传附件 files 参数 ==>> None")logger.info("接口 cookies 参数 ==>> {}".format(complexjson.dumps(cookies, indent=4, ensure_ascii=False) if cookies else 'None'))
定义了一个RestClient类,用于发送HTTP请求到指定的API根URL。该类支持GET、POST、PUT、DELETE和PATCH等HTTP方法。它使用requests库来发起请求,并提供了一个日志记录器来记录每次请求的详细信息。
__init__方法初始化RestClient实例,接受一个api_root_url参数,用于构造请求的完整URL。
get方法发送一个GET请求到指定的URL。
post方法发送一个POST请求到指定的URL,可以传入数据、JSON和文件。
put方法发送一个PUT请求到指定的URL,可以传入数据。
delete方法发送一个DELETE请求到指定的URL。
patch方法发送一个PATCH请求到指定的URL,可以传入数据。
request方法是上述所有HTTP方法的底层实现。它根据不同的HTTP方法构造请求,并使用session对象发送请求。该方法还支持传入额外的参数,如headers、params和cookies等。
request_log方法用于记录请求的详细信息,包括URL、HTTP方法、请求头、请求参数、请求体等。
总的来说,这个RestClient类提供了一个方便的方法来发送HTTP请求,并记录请求的详细信息,方便调试和监控。
后续接口的使用
class Register(RestClient):def __init__(self, api_root_url, **kwargs):super(Register, self).__init__(api_root_url, **kwargs)def register(self, **kwargs):"""执行注册操作。通过向“register”端点发送POST请求来实现用户注册。参数:**kwargs: 动态接收传入的关键字参数,这些参数将被添加到POST请求的数据中。返回值:发送POST请求后的响应对象。具体的响应内容依赖于后端的实现。"""return self.post("/register", **kwargs)
这里的super(Register, self).__init__(api_root_url, **kwargs)的作用是确保Register类的实例在创建时,不仅设置了自己的属性(如果有的话),还正确地初始化了从RestClient继承来的所有属性和进行了必要的配置设置。通过**kwargs,可以灵活地向RestClient的构造函数传递任何额外的配置信息,增强了类的灵活性和重用性。
1.对于非cookie和sessionid的系统,比如token的管理
import requests# 创建Session实例
session = requests.Session()# 设置Token(这里以Bearer Token为例)
token = "your_token_here"
session.headers.update({"Authorization": f"Bearer {token}"})# 现在,任何通过这个session实例发出的请求都会自动包含Authorization头
response = session.get("https://api.example.com/data")# 打印响应内容
print(response.text)
考虑在request中加入变量,根据变量值区分是否需要自动更新headers。其中Authorization是项目中用于校验的token。
下面是对于这部分代码的解读。通过session.headers.update()方法添加了一个自定义的请求头——Authorization,其值为Bearer {token},这里Bearer是一种常见的Token认证方案的类型,后面跟着的是实际的Token字符串。这样设置后,通过这个session发出的所有请求都会自动在请求头中包含这个Token信息,实现认证目的。