企业设备用dep拉取Go项目依赖遇407代理认证错误求助
遇到这种407代理认证问题确实挺头疼的,我之前帮不少开发者排查过类似情况,你已经设置了环境变量和git的http.proxy,但可能还有这些容易忽略的点:
检查dep是否单独配置了代理
dep有时候会忽略系统级的环境变量,需要单独在项目配置中指定。你可以在项目根目录的Gopkg.toml里添加代理配置:[proxy] http = "http://user:password@proxyname:proxyport" https = "http://user:password@proxyname:proxyport"注意这里HTTPS的代理地址也是HTTP开头的——因为代理本身是通过HTTP协议转发HTTPS请求的。
处理密码中的特殊字符
如果你的密码包含@、:、%这类特殊字符,直接写在代理URL里会被解析错误。必须把这些字符做URL编码:比如@换成%40,:换成%3A,%换成%25。举个例子,密码是pass@word123,要写成pass%40word123。确认git的https.proxy也已配置
你只提到了http.proxy,但dep拉取的依赖仓库大多是HTTPS协议的,所以必须同时配置HTTPS代理:git config --global https.proxy http://user:password@proxyname:proxyport另外也检查下项目本地的
.git/config,有没有覆盖全局代理配置的情况。企业代理的NTLM认证问题
很多企业内部代理用的是NTLM认证,这种情况下普通的user:password格式根本不生效。可以试试用cntlm这类工具中转认证:- 安装cntlm,配置好企业代理的用户名、密码、域名信息
- 启动cntlm,让它监听本地端口(比如127.0.0.1:3128)
- 把环境变量和git的代理地址改成
http://127.0.0.1:3128
验证环境变量是否真正生效
有时候设置环境变量后,终端没有重新加载导致变量未生效。执行dep ensure前先验证:echo $http_proxy echo $https_proxy如果输出为空或不正确,重新设置变量(Linux/macOS用
export,Windows CMD用set,PowerShell用$env:前缀)。升级dep到最新版本
较老的dep版本可能存在代理处理的bug,试试升级:go get -u github.com/golang/dep/cmd/dep
你可以逐个排查这些点,应该能解决问题。
内容的提问来源于stack exchange,提问作者Prasanna K Rao

