t2-api-autotest/utils/requests_control.py

101 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib3
from urllib3.util.retry import Retry
import requests
from requests.adapters import HTTPAdapter
from requests.exceptions import RetryError, Timeout, RequestException
from utils import config
from utils.json_control import JsonHandler
from utils.log_control import logger
from utils.decorator_control import Log
from utils.create_cookie_control import Cookies
class Authentication:
"""获取token/cookies"""
def __init__(self):
# 读取全局配置中的账号信息
self.payload = {"account": config.account,
"password": config.password
}
@property
def cookie_token(self):
try:
res = requests.post('https://tianqiai/login', data=self.payload)
js = JsonHandler(res.json())
res_cookies, res_token = res.cookies, js.find_one('$..token')
return res_cookies, res_token
except Exception as err:
logger.warning(f'未获取到登录认证信息,请检查: {err}')
return Cookies, {} # 如果cookie没有获取成功则根据全局配置域名生成一个备用cookie
session = requests.session()
session.verify = False
session.cookies, token = Authentication().cookie_token
class RestClient:
"""封装api请求类"""
def __init__(self,
timeout=10,
retry=3,
backoff_factor=0.3,
proxies=None
):
# 初始化函数设置请求超时时间、重试次数、backoff因子指定失败后下一次重试时间间隔的增长因子、代理等参数
# 这四个参数都是默认设置的,用户可以根据需要进行更改
urllib3.disable_warnings()
self.timeout = timeout # 超时时间
self.proxies = proxies or {} # 设置代理
self.session = session # 创建会话对象
self.session.proxies.update(self.proxies)
retry_strategy = Retry(
total=retry,
backoff_factor=backoff_factor,
status_forcelist=[429, 500, 502, 503, 504],
)
adapter = HTTPAdapter(max_retries=retry_strategy)
self.session.mount("https://", adapter)
self.session.mount("http://", adapter)
# 设置重试策略并将其与会话对象关联,以便每次请求失败时自动重试
@Log(True)
def request(self, env, **kwargs):
url, request_method = env
res = {
'get': lambda: self.session.get(url, **kwargs),
'post': lambda: self.session.post(url, **kwargs),
'options': lambda: self.session.options(url, **kwargs),
'head': lambda: self.session.head(url, **kwargs),
'put': lambda: self.session.put(url, **kwargs),
'patch': lambda: self.session.patch(url, **kwargs),
'delete': lambda: self.session.delete(url, **kwargs)
}.get(request_method.lower(), False)()
try:
return res
except (RequestException, Timeout, RetryError) as err:
logger.error(f'请求失败: {err}')
return None
@staticmethod
def headers():
"""全局headers"""
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
# 'token': token
}
return headers
if __name__ == '__main__':
pass