突破 Web Request 限制:FlareSolverr 代理服務部署與應用指南

在自動化工作流或網頁資料存取時,常常會遇到目標網站啟用防機器人機制(如 Cloudflare 挑戰頁面),導致標準 HTTP 請求回傳 403 Forbidden503 Service Unavailable。 此時,傳統的請求節點無法執行 JavaScript 驗證,流程就會中斷。

FlareSolverr 正是為了解決這個難題而設計的代理伺服器!


FlareSolverr 的運作機制

FlareSolverr 結合了無頭瀏覽器(Headless Browser)技術,流程如下:

  1. 接收指令:用戶端向 FlareSolverr 發送包含目標 URL 的 POST 請求。
  2. 模擬環境:FlareSolverr 在背景啟動 Chromium/ WebKit 無頭瀏覽器實例。
  3. 通過挑戰:瀏覽器自動處理 JavaScript 驗證、瀏覽器特徵、TLS 指紋等挑戰。
  4. 回傳內容:頁面載入並通過驗證後,將 HTML 原始碼與 Cookie 回傳給用戶端。

部署方式

建議使用 Docker 來部署 FlareSolverr,確保環境穩定且依賴簡單。

Docker 單機部署

快速啟動單一實例:

docker run -d \
  --name=flaresolverr \
  -p 8191:8191 \
  -e LOG_LEVEL=info \
  --restart unless-stopped \
  ghcr.io/flaresolverr/flaresolverr:latest

Docker Compose 佈署

適合生產環境或與 n8n 等服務串接:

version: "3.8"
services:
  flaresolverr:
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    environment:
      - LOG_LEVEL=info
      - TZ=Asia/Taipei
    ports:
      - "8191:8191"
    restart: unless-stopped

使用方法與 API 調用

部署完成後,請將原本直接對目標網站的請求,改為對 FlareSolverr 的 API 端口(預設 8191)發送。

基本請求格式

URL: http://:8191/v1 Method: POST Payload:

{
  "cmd": "request.get",
  "url": "https://target-website.com",
  "maxTimeout": 60000
}

響應結構與處理建議

FlareSolverr 會回傳結構化 JSON,主要內容在 solution.response 欄位(即網站 HTML)。 開發時建議進行防禦性編程,僅在 status"ok" 時提取內容:

{
  "status": "ok",
  "solution": {
    "response": "...",
    "cookies": [ ... ]
  },
  ...
}

n8n 工作流整合設定

在 n8n 中,你需要將原本對準 RSS 網址的請求,改為向 FlareSolverr 發送 POST 請求。

HTTP Request 節點參數:

  • Method: POST
  • URL: http://YOUR_SERVER_IP:8191/v1
  • Body Content Type: JSON
  • JSON Parameters:
    • cmd: request.get
    • url: https://target-rss-site.com/feed
    • maxTimeout: 60000

防禦性資料處理 (Code Node):

由於 FlareSolverr 回傳的是一個 JSON 物件,內容藏在 solution.response 中,建議使用以下代碼提取並清理:

// 確保內容存在並進行防禦性清理
try {
    const rawHtml = $node["HTTP Request"].json.solution.response;
    // 移除可能干擾 RSS 解析的非法換行或空白
    const cleanRss = rawHtml.trim();

    return {
        rss_content: cleanRss,
        user_agent: $node["HTTP Request"].json.solution.userAgent,
        timestamp: $now.toISO()
    };
} catch (e) {
    return { error: "解析失敗,請檢查 FlareSolverr 狀態" };
}

注意事項

  • 資源管理:FlareSolverr 會消耗較多 RAM(因為它啟動了實體瀏覽器)。如果你的 n8n 同時啟動多個爬蟲任務,請務必給予 Docker 容器足夠的記憶體限制。
  • Cookie 複用:對於需要登入或更高難度的網站,可以從 solution.cookies 提取 Cookie,並在後續的請求中直接傳入,避免重複觸發 5 秒盾。
  • 安全性絕對不要將 8191 端口對外公開。建議在 Docker Compose 中移除 ports 映射,並透過 Docker 內部網路名稱(例如 http://flaresolverr:8191/v1)讓 n8n 訪問。