代理IP怎么配Go语言HTTP客户端?net/http标准库和第三方包的代理设置

环境变量、Transport自定义代理和SOCKS5 dialer三种方式加goroutine并发采集
发布于
2

Go语言写的采集工具或API代理——标准库net/http代理配置和Python/Node.js不太一样。本文讲清Go的三种代理配置方式。

方法一:环境变量

// 程序启动前设环境变量
os.Setenv("HTTP_PROXY", "http://代理IP:端口")
os.Setenv("HTTPS_PROXY", "http://代理IP:端口")
// Go的http.DefaultTransport自动读取这些环境变量

方法二:自定义Transport

proxyURL, _ := url.Parse("http://用户名:密码@代理IP:端口")
transport := &http.Transport{
    Proxy: http.ProxyURL(proxyURL),
}
client := &http.Client{Transport: transport}
resp, _ := client.Get("https://ip.sb")

方法三:SOCKS5代理

import "golang.org/x/net/proxy"
dialer, _ := proxy.SOCKS5("tcp", "代理IP:端口", &proxy.Auth{User: "用户名", Password: "密码"}, proxy.Direct)
transport := &http.Transport{Dial: dialer.Dial}
client := &http.Client{Transport: transport}

天行IP(邀请码 blsj,月付6元起)静态节点在Go里配SOCKS5做采集代理。

并发采集的代理池

维护多个代理URL→每个goroutine随机取一个→控制并发数匹配代理上限。Goroutine天生的并发能力配合多代理IP横向扩展。

常见问题

Go代理认证信息能不能不写明文?

从环境变量或配置文件读取代理URL。不要硬编码在代码里。

Transport需要复用吗?

需要——一个http.Client重复使用会自动复用TCP连接(Keep-Alive)。不要每个请求创建新的Client。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

HTTP代理和SOCKS5代理都能改IP,但它们在数据包里做的事完全不同。用Wireshark抓个包对比一下,你会发现HTTP代理能看到你访问的网页内容(理论上),SOCKS5只是一个透明管道什么都不看。这个区别决定了不同场景下该用哪个。