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