Windows环境下使用代理安装Golang模块失败问题求助

Windows环境下使用代理安装Golang模块失败问题求助 go 1.24

C:\Users\user\hello>go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go: google.golang.org/protobuf/cmd/protoc-gen-go@latest: module google.golang.org/protobuf/cmd/protoc-gen-go: invalid response from proxy "http://company.proxy.com:8080/": invalid character '<' looking for beginning of value

更多关于Windows环境下使用代理安装Golang模块失败问题求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html

9 回复

只需设置系统HTTP/HTTPS代理。

更多关于Windows环境下使用代理安装Golang模块失败问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


尝试 [scheme:][//[userinfo@]host][/]path[?query][#fragment] ?

你确定你的环境和代理能够访问 google.golang.org 吗?如果你的环境和代理无法访问,你应该考虑使用 GOPROXY。

请阅读我关于“userinfo”的信息

If I add it in the http(s)_proxy variable it doesn’t accept as anything after the first instance of colon is considered a port number.
C:\Users\user>set | findstr http
HTTPS_PROXY=http://company.proxy.com:8080
HTTP_PROXY=http://company.proxy.com:8080

代理变量已经设置好了。但仍然是同样的错误。

Go 是否提供了某种方式来传递代理的用户名和密码?

如果我把它加在 http(s)_proxy 变量里,它不接受,因为冒号后面的任何内容都被认为是端口号。

老实说,我不想和你说话。 我不知道你为什么会有这个奇怪的问题。

set HTTP_PROXY=http://user:password@example.com:1081
set HTTPS_PROXY=http://user:password@example.com:1081

你真的试过这个吗?(我在自己的Windows上运行并使用wget,它是有效的)

如果不行,为什么不试试其他方法呢?

  1. 使用代理软件,一些全局代理程序可以很好地工作。
  2. 自己写一个简单的http转发。Golang的标准库自带http.Proxy处理函数。
  3. 找一个可靠的GOPROXY。
  4. 一些IDE甚至自带代理工具,比如goland。

方法太多了,你是一直在等待社区的回应,而不是主动去探索方法吗?

我可以通过网页浏览器访问。 golang.org 将我重定向到 go[dot]dev google.golang.org 将我重定向到 cloud[dot]google[dot]com/go/google[dot]golang[dot]org

C:\Users\user>set GOPROXY=https://proxy.golang.org,direct

C:\Users\user>go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go: google.golang.org/protobuf/cmd/protoc-gen-go@latest: module google.golang.org/protobuf/cmd/protoc-gen-go: Get "https://proxy.golang.org/google.golang.org/protobuf/cmd/protoc-gen-go/@v/list": proxyconnect tcp: dial tcp: lookup http: no such host

也许你需要更多的解释(我以为你已经仔细阅读了我之前的帖子)。以下是控制台日志。

C:\Users\user>set HTTP_PROXY=http://myuserid:mypass@company-proxy.com:8080

C:\Users\user>set HTTPS_PROXY=http://myuserid:mypass@company-proxy.com:8080

C:\Users\user>go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go: google.golang.org/protobuf/cmd/protoc-gen-go@latest: module google.golang.org/protobuf/cmd/protoc-gen-go: Get "http://compay-proxy.com:8080/google.golang.org/protobuf/cmd/protoc-gen-go/@v/list": proxyconnect tcp: dial tcp: lookup http: no such host

在发布到这里之前,我已经尝试了很多方法。这些问题是由于我公司的代理造成的。它甚至不允许我用 go 启动程序(真糟糕)。我想更专注于我的任务,而不是在这些琐碎的事情上浪费时间。

来自 VS Code 的另一段信息

2025-02-24 16:27:19.850 [info] goimports: failed to install goimports(golang.org/x/tools/cmd/goimports@latest): Error: Command failed: C:\Program Files\Go\bin\go.exe install -v golang.org/x/tools/cmd/goimports@latest
go: golang.org/x/tools/cmd/goimports@latest: module golang.org/x/tools/cmd/goimports: invalid response from proxy "http://company-proxy.com:8080/": invalid character '<' looking for beginning of value

在Windows环境下通过代理安装Golang模块时遇到invalid character '<'错误,通常是因为代理服务器返回了HTML内容(如登录页面或错误页面),而不是预期的JSON响应。以下是解决方案:

1. 检查代理配置

首先确认代理设置正确:

// 设置环境变量(PowerShell)
$env:HTTP_PROXY = "http://company.proxy.com:8080"
$env:HTTPS_PROXY = "http://company.proxy.com:8080"
$env:NO_PROXY = "localhost,127.0.0.1"

// 或者使用set命令(CMD)
set HTTP_PROXY=http://company.proxy.com:8080
set HTTPS_PROXY=http://company.proxy.com:8080

2. 验证代理连接

使用curl或wget测试代理是否正常工作:

# 测试代理连接
curl -x http://company.proxy.com:8080 https://proxy.golang.org/google.golang.org/protobuf/@v/list

3. 配置Go使用直接连接绕过代理

如果代理有问题,可以配置Go不使用代理:

# 临时禁用代理
set HTTP_PROXY=
set HTTPS_PROXY=

# 或者使用GOPROXY直接连接
go env -w GOPROXY=https://proxy.golang.org,direct

4. 使用GOPROXY配置

配置多个代理源,增加direct选项:

# 设置GOPROXY
go env -w GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct

# 或者使用阿里云镜像
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

5. 检查公司代理认证

如果代理需要认证,配置认证信息:

# 格式:http://用户名:密码@proxy地址:端口
set HTTP_PROXY=http://username:password@company.proxy.com:8080
set HTTPS_PROXY=http://username:password@company.proxy.com:8080

6. 使用GOPRIVATE绕过代理

对于私有模块,可以设置GOPRIVATE:

# 设置私有仓库不走代理
go env -w GOPRIVATE=*.company.com,github.com/your-org

7. 完整示例配置脚本

# Windows PowerShell配置脚本
$env:GO111MODULE = "on"
$env:GOPROXY = "https://goproxy.cn,direct"
$env:GOSUMDB = "sum.golang.google.cn"
$env:HTTP_PROXY = "http://company.proxy.com:8080"
$env:HTTPS_PROXY = "http://company.proxy.com:8080"

# 然后运行安装命令
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

8. 验证配置

检查当前Go环境配置:

go env | findstr PROXY
go env GOPROXY
go env GOSUMDB

错误信息中的invalid character '<'表明代理返回了HTML而非JSON,这通常意味着代理服务器配置问题或需要认证。建议先测试代理连接,然后根据实际情况调整Go的代理配置。

回到顶部