test
This commit is contained in:
57
app.py
57
app.py
@@ -6,6 +6,7 @@ from dotenv import load_dotenv
|
||||
import os
|
||||
from typing import Optional, Dict, Any
|
||||
from contextlib import asynccontextmanager
|
||||
from playwright_sign import sign_with_playwright
|
||||
|
||||
# 加载环境变量
|
||||
load_dotenv()
|
||||
@@ -26,7 +27,6 @@ browser_context = None
|
||||
context_page = None
|
||||
playwright_instance = None
|
||||
|
||||
|
||||
async def get_context_page(instance, stealth_js_path):
|
||||
chromium = instance.chromium
|
||||
browser = await chromium.launch(headless=True)
|
||||
@@ -125,7 +125,7 @@ async def reload_browser():
|
||||
except Exception as e:
|
||||
print(f"Error during reload_browser operation: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
async def sign(uri: str, data: Dict[str, Any], a1: str, web_session: str) -> Dict[str, Any]:
|
||||
async def sign(uri: str, data: Optional[Dict[str, Any]], a1: str, method: str = "POST") -> Dict[str, Any]:
|
||||
global browser_context, context_page # 声明全局变量
|
||||
global global_a1
|
||||
try:
|
||||
@@ -137,41 +137,26 @@ async def sign(uri: str, data: Dict[str, Any], a1: str, web_session: str) -> Dic
|
||||
await context_page.reload()
|
||||
await asyncio.sleep(1)
|
||||
|
||||
# 执行 JavaScript 函数
|
||||
b1 = await context_page.evaluate("() => localStorage.getItem('b1')")
|
||||
b1b1 = await context_page.evaluate("() => localStorage.getItem('b1b1')")
|
||||
encrypt_params = await context_page.evaluate("([url, data]) => window._webmsxyw(url, data)", [uri, data])
|
||||
|
||||
if not encrypt_params or not isinstance(encrypt_params, dict):
|
||||
raise HTTPException(status_code=500, detail="Failed to retrieve encryption parameters")
|
||||
|
||||
# 使用 playwright_sign 模块的 sign_with_playwright 函数
|
||||
signs = await sign_with_playwright(context_page, uri, data, a1, method)
|
||||
|
||||
return {
|
||||
"x-s": encrypt_params["X-s"],
|
||||
"x-t": str(encrypt_params["X-t"]),
|
||||
"b1": b1,
|
||||
"x-s": signs["x-s"],
|
||||
"x-t": signs["x-t"],
|
||||
"x-s-common": signs["x-s-common"],
|
||||
"x-b3-traceid": signs["x-b3-traceid"],
|
||||
"a1": global_a1,
|
||||
"b1b1": b1b1,
|
||||
}
|
||||
except Exception as e:
|
||||
print(f"Error during sign operation: {e}")
|
||||
# 检测页面崩溃错误并重新初始化
|
||||
if "Target crashed" in str(e):
|
||||
print("页面崩溃,正在重新初始化浏览器上下文和页面...")
|
||||
try:
|
||||
await reload_browser()
|
||||
# 重试签名操作
|
||||
return await sign(uri, data, a1, web_session)
|
||||
except Exception as reinit_error:
|
||||
print(f"重新初始化失败: {reinit_error}")
|
||||
raise HTTPException(status_code=500, detail="Failed to recover from page crash")
|
||||
else:
|
||||
print(f"Error during sign operation: {e}")
|
||||
try:
|
||||
await reload_browser()
|
||||
# 重试签名操作
|
||||
return await sign(uri, data, a1, web_session)
|
||||
except Exception as reinit_error:
|
||||
print(f"重新初始化失败: {reinit_error}")
|
||||
raise HTTPException(status_code=500, detail="Failed to recover from page crash")
|
||||
try:
|
||||
await reload_browser()
|
||||
# 重试签名操作
|
||||
return await sign(uri, data, a1, method)
|
||||
except Exception as reinit_error:
|
||||
print(f"重新初始化失败: {reinit_error}")
|
||||
raise HTTPException(status_code=500, detail="Failed to recover from error")
|
||||
|
||||
|
||||
@app.post("/sign")
|
||||
@@ -180,10 +165,10 @@ async def sign_endpoint(request: Request):
|
||||
uri = json_data.get("uri")
|
||||
data = json_data.get("data")
|
||||
a1 = json_data.get("a1")
|
||||
web_session = json_data.get("web_session")
|
||||
if not uri or not a1:
|
||||
raise HTTPException(status_code=400, detail="Missing required parameters")
|
||||
me = await sign(uri, data, a1, web_session)
|
||||
method = json_data.get("method", "POST")
|
||||
if not uri or not a1:
|
||||
raise HTTPException(status_code=400, detail="Missing required parameters")
|
||||
me = await sign(uri, data, a1, method)
|
||||
return {
|
||||
"a1": a1,
|
||||
"sign": me,
|
||||
|
||||
Reference in New Issue
Block a user