Golang代理设置方法
在Golang中如何设置HTTP/HTTPS代理?我尝试了http.ProxyURL但没成功,请问正确的代理配置方法是什么?需要处理认证的情况该怎么实现?能否提供一个完整的代码示例?
2 回复
在Golang中设置代理主要有以下几种方法,适用于HTTP/HTTPS请求或全局网络访问:
1. 使用标准库net/http设置代理
package main
import (
"net/http"
"net/url"
"io/ioutil"
"fmt"
)
func main() {
// 设置代理地址
proxyURL, _ := url.Parse("http://proxy-server:8080")
// 创建Transport配置代理
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
// 创建HTTP客户端
client := &http.Client{
Transport: transport,
}
// 发送请求
resp, err := client.Get("http://example.com")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
2. 支持认证的代理
// 如果代理需要用户名密码认证
proxyURL, _ := url.Parse("http://username:password@proxy-server:8080")
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
3. 环境变量方式(全局代理)
在运行程序前设置环境变量:
export HTTP_PROXY=http://proxy-server:8080
export HTTPS_PROXY=http://proxy-server:8080
go run main.go
4. 使用golang.org/x/net/proxy支持SOCKS5代理
import (
"golang.org/x/net/proxy"
"net/http"
)
func main() {
// 创建SOCKS5代理dialer
dialer, err := proxy.SOCKS5("tcp", "socks5-server:1080", nil, proxy.Direct)
if err != nil {
panic(err)
}
transport := &http.Transport{
Dial: dialer.Dial,
}
client := &http.Client{
Transport: transport,
}
// 使用客户端发送请求...
}
注意事项:
- 生产环境中建议处理代理连接错误
- 考虑添加超时设置
- 根据需要选择是否验证SSL证书
选择哪种方法取决于你的具体需求:单个请求使用自定义Transport,全局代理使用环境变量,SOCKS5代理使用专门的库。


