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。






