目的
1、实际的使用场景,无法避免的需要区分GET、POST、PUT、PATCH、DELETE等不同的方式请求,以及不同请求的传参方式
2、python中requests中,session.request方法,GET请求,只支持params传递参数
session.request(method, url, params=params, headers=headers, **kwargs)
3、POST、PUT、PATCH等其他方式,即支持data传递请求体数据,也支持json 传递请求体数据,但是两者不可同时使用,否则会抛出异常。
4、DELETE方法,支持支持params传递参数,也支持data或者json,业界通常使用的是params穿参、或者url自带参数
设计思路
1、将GET请求和DELETE,统一使用params传递参数,在封装requests中进行区分
2、将POST、PUT、PATCH等方法,统一采用data传递参数,如果遇见需要json传递的场景可以在header中添加Content-Type: application/json进行2个场景兼容
代码实现
import requests
class Interfaces:
def __init__(self):
"""session管理器"""
self.session = requests.session()
def request(self, method, url, params=None, data=None, headers=None, **kwargs):
# 根据请求方法自适应传递参数
if method.upper() in ['GET', 'DELETE']:
# GET 请求使用 params 传递查询参数
response = self.session.request(method, url, params=params, headers=headers, **kwargs)
elif method.upper() in ['POST', 'PUT', 'PATCH']:
# POST、PUT、PATCH、DELETE 请求使用 data 或 json 传递请求体数据
response = self.session.request(method, url, data=data, headers=headers, **kwargs)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
return response
def close_session(self):
"""关闭session"""
self.session.close()
interfaces = Interfaces()