Merge pull request #4445 from cddjr/feat_nettest

This commit is contained in:
jxxghp
2025-06-13 19:06:02 +08:00
committed by GitHub
2 changed files with 45 additions and 16 deletions
+40 -14
View File
@@ -1,6 +1,7 @@
import asyncio import asyncio
import io import io
import json import json
import re
import tempfile import tempfile
from collections import deque from collections import deque
from datetime import datetime from datetime import datetime
@@ -446,30 +447,55 @@ def ruletest(title: str,
@router.get("/nettest", summary="测试网络连通性") @router.get("/nettest", summary="测试网络连通性")
def nettest(url: str, def nettest(
proxy: bool, url: str,
_: schemas.TokenPayload = Depends(verify_token)): proxy: bool,
include: Optional[str] = None,
_: schemas.TokenPayload = Depends(verify_token),
):
""" """
测试网络连通性 测试网络连通性
""" """
# 记录开始的毫秒数 # 记录开始的毫秒数
start_time = datetime.now() start_time = datetime.now()
headers = None
if "github" in url or "{GITHUB_PROXY}" in url:
# 这是github的连通性测试
url = url.replace(
"{GITHUB_PROXY}", UrlUtils.standardize_base_url(settings.GITHUB_PROXY or "")
)
headers = settings.GITHUB_HEADERS
url = url.replace("{TMDBAPIKEY}", settings.TMDB_API_KEY) url = url.replace("{TMDBAPIKEY}", settings.TMDB_API_KEY)
result = RequestUtils(proxies=settings.PROXY if proxy else None, url = url.replace(
ua=settings.USER_AGENT).get_res(url) "{PIP_PROXY}",
UrlUtils.standardize_base_url(settings.PIP_PROXY or "https://pypi.org/simple/"),
)
result = RequestUtils(
proxies=settings.PROXY if proxy else None,
headers=headers,
timeout=10,
ua=settings.USER_AGENT,
).get_res(url)
# 计时结束的毫秒数 # 计时结束的毫秒数
end_time = datetime.now() end_time = datetime.now()
time = round((end_time - start_time).total_seconds() * 1000)
# 计算相关秒数 # 计算相关秒数
if result and result.status_code == 200: if result is None:
return schemas.Response(success=True, data={ return schemas.Response(success=False, message="无法连接", data={"time": time})
"time": round((end_time - start_time).microseconds / 1000) elif result.status_code == 200:
}) if include and not re.search(r"%s" % include, result.text, re.IGNORECASE):
elif result: # 通常是被加速代理跳转到其它页面了
return schemas.Response(success=False, message=f"错误码:{result.status_code}", data={ logger.error(f"{url} 的响应内容不匹配包含规则 {include}")
"time": round((end_time - start_time).microseconds / 1000) return schemas.Response(
}) success=False,
message=f"无效响应,不匹配 {include}",
data={"time": time},
)
return schemas.Response(success=True, data={"time": time})
else: else:
return schemas.Response(success=False, message="网络连接失败!") return schemas.Response(
success=False, message=f"错误码:{result.status_code}", data={"time": time}
)
@router.get("/modulelist", summary="查询已加载的模块ID列表", response_model=schemas.Response) @router.get("/modulelist", summary="查询已加载的模块ID列表", response_model=schemas.Response)
+5 -2
View File
@@ -139,6 +139,7 @@ class ConfigModel(BaseModel):
"api.github.com," "api.github.com,"
"github.com," "github.com,"
"raw.githubusercontent.com," "raw.githubusercontent.com,"
"codeload.github.com,"
"api.telegram.org") "api.telegram.org")
# DOH 解析服务器列表 # DOH 解析服务器列表
DOH_RESOLVERS: str = "1.0.0.1,1.1.1.1,9.9.9.9,149.112.112.112" DOH_RESOLVERS: str = "1.0.0.1,1.1.1.1,9.9.9.9,149.112.112.112"
@@ -584,7 +585,8 @@ class Settings(BaseSettings, ConfigModel, LogConfigModel):
""" """
if self.GITHUB_TOKEN: if self.GITHUB_TOKEN:
return { return {
"Authorization": f"Bearer {self.GITHUB_TOKEN}" "Authorization": f"Bearer {self.GITHUB_TOKEN}",
"User-Agent": self.USER_AGENT,
} }
return {} return {}
@@ -612,7 +614,8 @@ class Settings(BaseSettings, ConfigModel, LogConfigModel):
print(f"无效的令牌或仓库信息: {token_pair}") print(f"无效的令牌或仓库信息: {token_pair}")
continue continue
headers[repo_info] = { headers[repo_info] = {
"Authorization": f"Bearer {token}" "Authorization": f"Bearer {token}",
"User-Agent": self.USER_AGENT,
} }
except Exception as e: except Exception as e:
print(f"处理令牌对 '{token_pair}' 时出错: {e}") print(f"处理令牌对 '{token_pair}' 时出错: {e}")