banner
DIYgod

Hi, DIYgod

写代码是热爱,写到世界充满爱!
github
twitter
bilibili
telegram
email
steam
playstation
nintendo switch

優雅使用 Cloudflare WARP 應對 RSSHub 反爬難題

🕊️ 本文送給更開放的互聯網


起因是看到 @geekbb 介紹 Warp 的推文。儘管 Warp 已經發布了很長時間,就保護 IP 隱私而言,它並沒有 iCloud Private Relay 好用,我也沒有魔法上網的需求。但是我突然意識到,我還是有隱藏 IP 的需求。

在開發 RSSHub 的幾年中,我發現提供公共 API 的站點非常少,許多站點還會採取嚴格的反爬控制來限制其平台內容的獲取。有些站點會屏蔽同一 IP 發出過多請求,而還有一些站點則會全面屏蔽常見雲服務器廠商的 IP 地址。因此,僅僅為了獲取最新幾條內容更新卻變得非常困難。

lord-of-the-rings-my-precious

這種情況需要使用代理,但是專門的爬蟲代理通常價格昂貴,性價比極低,如果 Cloudflare WARP 的無限流量和豐富的 IP 資源能被 RSSHub 利用就太棒了。RSSHub 已經支持了通用的代理協議,只要能將 WARP 包裝為通用的 proxy 就可以。

image

雖然無法直接在命令行環境中方便地使用官方客戶端,但這麼容易想到的點子肯定已經被別人實現過了。我在 GitHub 上找到了一個封裝的 Docker。

Connet to CloudFlare WARP, exposing `socks5` proxy all together.

然後只需要在 RSSHub 的 docker-compose.yml 中再添加這樣一個 service 來啟用代理服務

warp-socks:
    image: monius/docker-warp-socks:latest
    privileged: true
    volumes:
        - /lib/modules:/lib/modules
    cap_add:
        - NET_ADMIN
        - SYS_ADMIN
    sysctls:
        net.ipv6.conf.all.disable_ipv6: 0
        net.ipv4.conf.all.src_valid_mark: 1
    healthcheck:
        test: ["CMD", "curl", "-f", "https://www.cloudflare.com/cdn-cgi/trace"]
        interval: 30s
        timeout: 10s
        retries: 5

最後給 RSSHub 加一個 PROXY_URI 環境變量來使用代理

PROXY_URI: 'socks5h://warp-socks:9091'

我選取了一個我經常使用的 hotukdeals 路由(英國版的什麼值得買)進行測試。該站點會屏蔽所有 DigitalOcean 的 IP,因此一直處於 403 狀態。

image

加上 WARP 後可順利訪問

image

此外,我發現每次重啟 WARP 時,都會輸出新的 IP。儘管我沒有時間驗證,但我感覺 IP 應該會經常自動更改,這對解決反爬是一個好消息。

image

還可以進一步自定義 WireGuard 的配置,包括使用付費版 WARP+ 和自定義 endpoint,以獲取可能更好的結果。

生成 WireGuard 配置文件可以使用

🚤 Cross-platform, unofficial CLI for Cloudflare Warp

刷 WARP+ 流量和篩選 endpoint 可以使用

Github Repo not found

The embedded github repo could not be found…

有說法是 WARP+ 的速度並無明顯差異(《WARP、WARP + 速度對比,以及 WARP 速度上限》),但是是否影響反爬效果還需要進一步驗證。

如果一切順利,RSSHub 官方實例中許多嚴格反爬的路由應該能重新使用。我將在幾天內進行驗證並在此更新。

image

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。