You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言net/http包配置带用户名密码认证代理失败求助

解决方法

你当前代码的核心问题是未显式处理代理的身份认证逻辑,仅将账号密码放在代理URL中,部分场景下net/http包不会自动将其转换为代理要求的Proxy-Authorization请求头,导致认证失败无法连通代理。另外Windows系统层面的环境变量确实不支持直接配置带用户名密码的HTTP代理,直接通过Transport配置的方式是跨平台最稳定的方案。

修正后的代码

import (
    "net/http"
    "net/url"
    "encoding/base64"
    "time"
)

func SetProxy() *http.Client {
    cfg := GetConfig()
    if !cfg.UseProxy {
        return &http.Client{
            Timeout: 30 * time.Second,
        }
    }
    // 拼接完整代理URL,http前缀可根据代理实际协议替换为https/socks5
    fullProxyURL := "http://" + cfg.Proxy
    proxyUrl, err := url.Parse(fullProxyURL)
    if err != nil {
        panic(err)
    }

    transport := &http.Transport{
        Proxy: http.ProxyURL(proxyUrl),
        // 若代理使用自签证书可临时开启,生产环境不建议使用
        // TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }

    // 显式注入代理认证头,覆盖HTTP请求和HTTPS CONNECT两种场景
    if proxyUrl.User != nil {
        username := proxyUrl.User.Username()
        password, _ := proxyUrl.User.Password()
        authStr := username + ":" + password
        basicAuth := "Basic " + base64.StdEncoding.EncodeToString([]byte(authStr))
        // 处理HTTPS请求的CONNECT代理认证
        transport.ProxyConnectHeader = http.Header{
            "Proxy-Authorization": []string{basicAuth},
        }
        // 处理普通HTTP请求的代理认证
        transport.Proxy = func(req *http.Request) (*url.URL, error) {
            req.Header.Set("Proxy-Authorization", basicAuth)
            return proxyUrl, nil
        }
    }

    return &http.Client{
        Transport: transport,
        Timeout: 30 * time.Second,
    }
}

注意事项

  • 若你使用的是SOCKS5代理,需要将代理URL前缀替换为socks5://,同时导入_ "golang.org/x/net/proxy"包完成SOCKS5协议的注册。
  • 轮换代理场景下,每次切换代理账号或地址时需要重新生成对应的Client和Transport实例,不要复用旧的Transport,避免连接池复用旧代理的长连接导致请求走旧代理。
  • 完整的配置规则可以参考Go官方标准库net/http包中Transport类型的官方文档,里面包含代理配置、认证头处理、连接池管理的所有说明。

内容的提问来源于stack exchange,提问作者PhysicsPanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:45:03