Colly 代理輪詢:自動(dòng)切換 IP 防封實(shí)戰(zhàn)

2025-07-14 11:04 更新

單 IP 被封?用 Colly 官方 proxy.RoundRobinProxySwitcher,一行代碼實(shí)現(xiàn)多代理輪詢,輕松偽裝成“千軍萬(wàn)馬”。

一、示例:

編程獅首頁(yè),并通過(guò) 2 個(gè)本地代理輪流訪問(wèn):

package main


import (
    "log"
    "time"


    "github.com/gocolly/colly/v2"
    "github.com/gocolly/colly/v2/proxy"
)


func main() {
    // 創(chuàng)建收集器,允許重復(fù)訪問(wèn)同一 URL
    c := colly.NewCollector(
        colly.AllowURLRevisit(),
        colly.AllowedDomains("m.o2fo.com"),
    )


    // 1. 設(shè)置代理池(socks5/http 均可)
    rp, err := proxy.RoundRobinProxySwitcher(
        "socks5://127.0.0.1:1337",
        "socks5://127.0.0.1:1338",
        "http://127.0.0.1:8080", // 也可混用 HTTP 代理
    )
    if err != nil {
        log.Fatal("代理設(shè)置失?。?, err)
    }
    c.SetProxyFunc(rp)


    // 2. 打印每次使用的代理和返回內(nèi)容
    c.OnResponse(func(r *colly.Response) {
        log.Printf("代理:%s | 返回長(zhǎng)度:%d 字節(jié) | URL:%s",
            r.Request.ProxyURL, len(r.Body), r.Request.URL)
    })


    // 3. 連續(xù)訪問(wèn) 5 次,觀察 IP 輪換
    for i := 0; i < 5; i++ {
        c.Visit("http://m.o2fo.com/")
        time.Sleep(1 * time.Second) // 避免太快
    }
}

二、3 步快速體驗(yàn)

步驟 操作 說(shuō)明
① 啟動(dòng)代理 ssh -D 1337 user@your-vps 或本地 Clash 得到 socks5 代理
② 換域名 把 AllowedDomains 換成你要爬的站 避免越界訪問(wèn)
③ 運(yùn)行 go run main.go 終端會(huì)顯示不同代理 IP 輪換

三、進(jìn)階:自定義代理選擇函數(shù)

想要“隨機(jī) + 失敗剔除”?自己寫選擇器:

import (
    "math/rand"
    "net/url"
)


var proxies = []*url.URL{
    {Scheme: "http", Host: "127.0.0.1:8080"},
    {Scheme: "socks5", Host: "127.0.0.1:1337"},
}


func randomProxy(r *http.Request) (*url.URL, error) {
    return proxies[rand.Intn(len(proxies))], nil
}


c.SetProxyFunc(randomProxy)

四、常見(jiàn)問(wèn)題速查

問(wèn)題 原因 解決
proxy connect failed 代理未啟動(dòng)或地址寫錯(cuò) 確認(rèn)代理端口 netstat -tlnp
403 / 503 依舊 目標(biāo)站檢測(cè) UA/Referer 加官方擴(kuò)展 extensions.RandomUserAgent(c)
速度慢 代理帶寬低 換更高帶寬節(jié)點(diǎn)或增加代理數(shù)

五、1 分鐘實(shí)驗(yàn)

  1. 打開(kāi) 終端 → 新建 proxy.go。
  2. 復(fù)制上方示例 → 把代理?yè)Q成你本地可用的地址 → go run proxy.go
  3. 觀察終端:每次請(qǐng)求代理不同,IP 已切換。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)