| # 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 分鐘,不會每次請求都啟動瀏覽器 |
| |