golang 爬虫之 gospider (requests--代理篇)

gospider 介绍

gospider 是一个golang 爬虫神器,它内置了多种反爬虫模块,是golang 爬虫必备的工具包

安装

go get -u gitee.com/baixudong/gospider

gitee地址

https://gitee.com/baixudong/gospider

github地址

https://github.com/baixudong007/gospider

代理介绍:支持http,socks5代理

gospider 中请求设置代理有两种模式:自实现模式,官方代理模式

自实现模式介绍: 自实现代理主要解决官方代理模式的几大问题:

  1. net/http 对ja3进行伪装时无法使用官方代理模式
  2. net/http 使用http2.Transport时无法使用官方代理模式
  3. 官方代理模式先连接代理,再从连接池中获取连接,而自实现代理是先获取连接后连接代理,这样可以最大程度的服用代理连接,避免代理的频繁连接,从而提高爬虫速度
  4. 自实现代理完全契合context,而官方代理模式在连接代理时无法完全和context的生命周期保持一致
  5. 自实现代理可以在使用同时使用ja3伪装和http2的情况下使用代理,而官方代理模式则不行

全局代理设置,固定代理(全局代理使用的是自实现代理)

package main
import (
    "context"
    "log"

    "gitee.com/baixudong/gospider/requests"
)

func main() {
    reqCli, err := requests.NewClient(context.TODO(), requests.ClientOption{Proxy: "http://192.168.1.30:7005"})
    if err != nil {
        log.Panic(err)
    }
    response, err := reqCli.Request(context.TODO(), "get", "http://myip.top")
    if err != nil {
        log.Panic(err)
    }
    log.Print(response.Text())

}

全局代理设置,按照规则返回代理(全局代理使用的是自实现代理)

package main

import (
    "context"
    "log"
    "net/url"

    "gitee.com/baixudong/gospider/requests"
)

func main() {
    reqCli, err := requests.NewClient(context.TODO(), requests.ClientOption{
        GetProxy: func(ctx context.Context, url *url.URL) (string, error) {
            return "socks5://192.168.1.30:7005", nil
        },
    })
    if err != nil {
        log.Panic(err)
    }
    response, err := reqCli.Request(context.TODO(), "get", "http://myip.top")
    if err != nil {
        log.Panic(err)
    }
    log.Print(response.Text())
}

官方代理模式介绍:当处于以下情况下强制使用自实现代理:

  1. net/http 对ja3进行伪装时无法使用官方代理模式
  2. net/http 使用http2.Transport时无法使用官方代理模式
  3. 自实现代理可以在使用同时使用ja3伪装和http2的情况下使用代理,而官方代理模式则不行

局部代理设置(局部代理使用的是官方代理模式,局部代理强制覆盖全局代理)

package main
import (
    "context"
    "log"

    "gitee.com/baixudong/gospider/requests"
)

func main() {
    reqCli, err := requests.NewClient(context.TODO())
    if err != nil {
        log.Panic(err)
    }
    response, err := reqCli.Request(context.TODO(), "get", "http://myip.top", requests.RequestOption{Proxy: "http://192.168.1.30:7005"})
    if err != nil {
        log.Panic(err)
    }
    log.Print(response.Text())
}

如何对个别请求强制关闭代理

package main

import (
    "context"
    "log"

    "gitee.com/baixudong/gospider/requests"
)

func main() {
    reqCli, err := requests.NewClient(context.TODO(), requests.ClientOption{Proxy: "socks5://192.168.1.30:7005"})
    if err != nil {
        log.Panic(err)
    }
    response, err := reqCli.Request(context.TODO(), "get", "http://myip.top", requests.RequestOption{DisProxy: true})
    if err != nil {
        log.Panic(err)
    }
    log.Print(response.Text())
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值