隧道代理怎么用啊?隧道代理GO语言代码示例

经常做数据采集的人对隧道代理肯定不陌生,但对于新手小白而言,有可能还是属于未涉及的领域,今天就来看看隧道代理(动态请求)利用GO语言要如何写代码。

普通模式

package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "sync"
    "time"
)
func main() {
    authKey := "DA71B637"                 //隧道代理的AuthKey
    password := "162313EF018A"            //隧道代理的AuthPwd
    proxyServer := "tunnel3.qg.net:19263" //隧道代理的地址
    targetURL := "https://d.qg.net/ip"
    rawURL := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer)
    proxyUrl, _ := url.Parse(rawURL)
    client := http.Client{
        Transport: &http.Transport{
            Proxy: http.ProxyURL(proxyUrl),
        },
    }
    req, _ := http.NewRequest("GET", targetURL, nil)
    rsp, err := client.Do(req)
    if err != nil {
        fmt.Printf("request failed: %s\n", err)
        return
    }
    defer rsp.Body.Close()
    body, err := ioutil.ReadAll(rsp.Body)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(string(body))
    }
}

打标记模式

package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "sync"
    "time"
)
/** 返回内容
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:114.219.115.191  来自于:中国 江苏 苏州  电信
  当前 IP:14.118.211.116  来自于:中国 广东 江门  电信
*/
func main() {
    authKey := "DA71B637"                 //动态请求隧道的AuthKey
    password := "162313EF018A"            //动态请求隧道的Password
    proxyServer := "tunnel3.qg.net:19263" //动态请求隧道的地址
    targetURL := "https://d.qg.net/ip"
    rawURL := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer)
    proxyUrl, _ := url.Parse(rawURL)
    client := http.Client{
        Transport: &http.Transport{
            ProxyConnectHeader: http.Header{
                "Proxy-TunnelID": []string{"channel-1"}, // 在CONNECT连接中新增Proxy-TunnelID打标记
                "Proxy-TTL":      []string{"10"},        // Proxy-TTL指定该标记IP的存活时间
            },
            Proxy: http.ProxyURL(proxyUrl),
        },
    }
    // 因为标记的存活时间是10s,所以循环11次中有10次的IP是一样的。
    // 第11次因为标记的IP到期了,系统会自动替换IP
    wg := sync.WaitGroup{}
    wg.Add(11)
    for i := 0; i < 11; i++ {
        go func() {
            defer wg.Done()
            req, _ := http.NewRequest("GET", targetURL, nil)
            rsp, err := client.Do(req)
            if err != nil {
                fmt.Printf("request failed: %s\n", err)
                return
            }
            defer rsp.Body.Close()
            body, err := ioutil.ReadAll(rsp.Body)
            if err != nil {
                fmt.Println(err)
            } else {
                fmt.Println(string(body))
            }
        }()
        time.Sleep(time.Second)
    }
    wg.Wait()
}

以上就是隧道代理GO语言代码示例啦,有需要的可以自取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值