Upload 9 files
Browse files- Dockerfile +4 -0
- main.py +21 -4
Dockerfile
CHANGED
|
@@ -33,6 +33,10 @@ RUN git clone https://github.com/Theyka/Turnstile-Solver.git /app/Turnstile-Solv
|
|
| 33 |
# 为 Turnstile-Solver 安装依赖
|
| 34 |
RUN pip install --no-cache-dir -r /app/Turnstile-Solver/requirements.txt
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
# 为求解器安装浏览器
|
| 37 |
# 这将下载并修补 chromium
|
| 38 |
RUN python -m patchright install chromium
|
|
|
|
| 33 |
# 为 Turnstile-Solver 安装依赖
|
| 34 |
RUN pip install --no-cache-dir -r /app/Turnstile-Solver/requirements.txt
|
| 35 |
|
| 36 |
+
# 预下载 browserforge 所需的数据文件
|
| 37 |
+
# 这可以防止在运行时因权限问题导致下载失败
|
| 38 |
+
RUN python -c "from browserforge.fingerprints import FingerprintGenerator; from browserforge.headers import HeaderGenerator; print('Pre-downloaded browserforge data files.')"
|
| 39 |
+
|
| 40 |
# 为求解器安装浏览器
|
| 41 |
# 这将下载并修补 chromium
|
| 42 |
RUN python -m patchright install chromium
|
main.py
CHANGED
|
@@ -4,6 +4,7 @@ import time
|
|
| 4 |
import uuid
|
| 5 |
import threading
|
| 6 |
from typing import Any, Dict, List, Optional, TypedDict, Union
|
|
|
|
| 7 |
|
| 8 |
import requests
|
| 9 |
import websocket
|
|
@@ -34,9 +35,21 @@ DEBUG_MODE = os.environ.get("DEBUG_MODE", "false").lower() == "true"
|
|
| 34 |
REQUEST_TIMEOUT = 120.0 # 请求超时时间,秒
|
| 35 |
HTTP_PROXY = os.environ.get("HTTP_PROXY")
|
| 36 |
PROXIES = {"http": HTTP_PROXY, "https": HTTP_PROXY} if HTTP_PROXY else None
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
|
| 41 |
|
| 42 |
# Pydantic Models
|
|
@@ -462,7 +475,11 @@ def tenbin_stream_generator(model: str, prompt: str, session_id: str, execution_
|
|
| 462 |
ws = None
|
| 463 |
try:
|
| 464 |
log_debug("Connecting to WebSocket...")
|
| 465 |
-
ws = websocket.create_connection(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 466 |
ws.send(json.dumps({"type": "connection_init"}))
|
| 467 |
init_response = ws.recv()
|
| 468 |
log_debug(f"WebSocket init response: {init_response}")
|
|
|
|
| 4 |
import uuid
|
| 5 |
import threading
|
| 6 |
from typing import Any, Dict, List, Optional, TypedDict, Union
|
| 7 |
+
from urllib.parse import urlparse
|
| 8 |
|
| 9 |
import requests
|
| 10 |
import websocket
|
|
|
|
| 35 |
REQUEST_TIMEOUT = 120.0 # 请求超时时间,秒
|
| 36 |
HTTP_PROXY = os.environ.get("HTTP_PROXY")
|
| 37 |
PROXIES = {"http": HTTP_PROXY, "https": HTTP_PROXY} if HTTP_PROXY else None
|
| 38 |
+
WEBSOCKET_PROXY_CONFIG = {}
|
| 39 |
+
|
| 40 |
+
if HTTP_PROXY:
|
| 41 |
+
print(f"Using HTTP/HTTPS proxy: {HTTP_PROXY}")
|
| 42 |
+
parsed_proxy_url = urlparse(HTTP_PROXY)
|
| 43 |
+
WEBSOCKET_PROXY_CONFIG = {
|
| 44 |
+
"http_proxy_host": parsed_proxy_url.hostname,
|
| 45 |
+
"http_proxy_port": parsed_proxy_url.port,
|
| 46 |
+
}
|
| 47 |
+
if parsed_proxy_url.username and parsed_proxy_url.password:
|
| 48 |
+
WEBSOCKET_PROXY_CONFIG["http_proxy_auth"] = (
|
| 49 |
+
parsed_proxy_url.username,
|
| 50 |
+
parsed_proxy_url.password,
|
| 51 |
+
)
|
| 52 |
+
print(f"Using WebSocket proxy config: {WEBSOCKET_PROXY_CONFIG}")
|
| 53 |
|
| 54 |
|
| 55 |
# Pydantic Models
|
|
|
|
| 475 |
ws = None
|
| 476 |
try:
|
| 477 |
log_debug("Connecting to WebSocket...")
|
| 478 |
+
ws = websocket.create_connection(
|
| 479 |
+
url,
|
| 480 |
+
header=headers,
|
| 481 |
+
**WEBSOCKET_PROXY_CONFIG
|
| 482 |
+
)
|
| 483 |
ws.send(json.dumps({"type": "connection_init"}))
|
| 484 |
init_response = ws.recv()
|
| 485 |
log_debug(f"WebSocket init response: {init_response}")
|