File size: 2,266 Bytes
5ef6e9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Turnstile Solver — 自建 Cloudflare Turnstile 求解服務

使用 Playwright + Headless Chromium 自動求解 Cloudflare Turnstile,免第三方 API 費用。

## 部署到 Vercel

### 1. Fork / 上傳此目錄到 GitHub`artifacts/turnstile-solver/` 的內容推送為一個 GitHub repo(或 monorepo 子目錄)。

### 2. 在 Vercel 建立新項目

1. Vercel Dashboard → **Add New Project**
2. 匯入你的 GitHub repo
3. **Framework Preset**: 選 `Other`
4. **Root Directory**: 如果是獨立 repo,留空;monorepo 則設為 `artifacts/turnstile-solver`
5. **Build Command**: 留空(Vercel 自動處理 TypeScript)
6. **Output Directory**: 留空

### 3. 設定環境變數(可選)

| 變數 | 說明 | 範例 |
|------|------|------|
| `SOLVER_SECRET` | 保護 API 的密鑰,設定後呼叫需帶 `X-Solver-Secret` header | `my-secret-key-123` |
| `CHROMIUM_PACK_URL` | 自定義 Chromium 下載 URL(預設使用 v133) | 留空即可 |

### 4. 部署後設定到星光工坊

部署完成後,將 Vercel 網址填入 Admin → Config → 「Playwright 求解器 URL」:

```
https://your-solver.vercel.app/api/solve
```

## API 說明

### `POST /api/solve`

返回一個有效的 Turnstile token。

**Request Headers(若設定了 SOLVER_SECRET):**
```
X-Solver-Secret: your-secret
```

**Query Params:**
- `?force=1` — 強制清除快取,重新求解

**Response:**
```json
{
  "token": "0.xyz...",
  "cached": false,
  "solvedInMs": 4200
}
```

**Error:**
```json
{ "error": "Solver failed: ..." }
```

### `GET /api/health`

健康檢查端點。

## 本機測試

```bash
cd artifacts/turnstile-solver
npm install
npx playwright install chromium   # 安裝本機 Chromium
npx vercel dev                    # 啟動本機 Vercel dev server
curl -X POST http://localhost:3000/api/solve
```

## 注意事項

- Vercel **Hobby 方案**函數大小上限 50MB,而 `@sparticuz/chromium-min` 在執行時動態下載 Chromium(不計入 bundle),應能通過
- 若遇到 Turnstile 無法求解(Cloudflare 偵測到機器人),建議:
  1. 加入更多 Stealth 修補(見 `src/solver.ts`)
  2. 換用付費服務(CapSolver)
- Token 快取 4.5 分鐘,不會每次請求都啟動瀏覽器