251117更新

This commit is contained in:
liubiren 2025-11-17 14:33:22 +08:00
parent 73c3a06dea
commit 1d4e643fc7
1 changed files with 4 additions and 14 deletions

View File

@ -89,10 +89,10 @@ class MySQLClient:
""" """
封装urllib.request的相关操作实现常用HTTPREQUEST 封装urllib.request的相关操作
使用方法 使用方法
client = HTTPClient() client = HTTPClient()
response = clinet.post(url) response = client.post(url)
""" """
@ -140,32 +140,22 @@ class TokenBucket:
def restrict(refill_rate=5, max_tokens=5): def restrict(refill_rate=5, max_tokens=5):
def decorator(func): def decorator(func):
# 初始化令牌桶 # 初始化令牌桶
token_bucket = TokenBucket(refill_rate=refill_rate, max_tokens=max_tokens) token_bucket = TokenBucket(refill_rate=refill_rate, max_tokens=max_tokens)
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
# 重试次数 # 重试次数
retries = 0 retries = 0
# 若重试数小于等于最大重试次数,则循环检查是否允许请求 # 若重试数小于等于最大重试次数,则循环检查是否允许请求
while retries <= 10: while retries <= 10:
success, wait_time = token_bucket.acquire() success, wait_time = token_bucket.acquire()
# 若允许请求则返回嵌套函数,若不允许请求则等待 # 若允许请求则返回嵌套函数,若不允许请求则等待
if success: if success:
return func(*args, **kwargs) return func(*args, **kwargs)
time.sleep(wait_time * 1.5**retries) time.sleep(wait_time * 1.5**retries)
retries += 1 retries += 1
raise Exception("request too frequently") raise Exception("request too frequently")
return wrapper return wrapper
return decorator return decorator
@ -423,7 +413,7 @@ class HTTPClient:
# 请求参数模型 # 请求参数模型
arguments = arguments.model_dump(exclude_none=True, by_alias=True) arguments = arguments.model_dump(exclude_none=True, by_alias=True)
# URL由HTTPURL对象转为字符串 # URL转为字符串
arguments["url"] = str(arguments["url"]) arguments["url"] = str(arguments["url"])
# 重构表单数据 # 重构表单数据
@ -493,7 +483,7 @@ class HTTPClient:
except Exception as exception: except Exception as exception:
# 尝试根据响应解析响应状态码和错误信息,否则进行构造 # 尝试根据响应解析响应状态码和错误信息,否则进行构造
try: try:
# JOSN反序列化 # JSON反序列化
# noinspection PyUnboundLocalVariable # noinspection PyUnboundLocalVariable
response_decoded = response.json() response_decoded = response.json()
# 响应状态码 # 响应状态码