go mod 返回 404 而curl 返回 200 OK 或者如何调试 go mod

问题描述 投票:0回答:1

我遇到了一个看似微不足道的问题,但我花了几个小时来解决它,但没有任何帮助。 首先,除了在我的机器上之外,我无法在任何地方重现它。

出于某种原因,当 go mod 尝试接收有关模块的元数据时,它会得到 404 而不是 200。

$ go mod download -x gitlab.com/secret/secret-repo/v2@latest
# get https://gitlab.com/secret/secret-repo/v2?go-get=1
# get https://gitlab.com/secret/secret-repo/v2?go-get=1: 404 Not Found (0.256s)

如果我在同一个 bash 会话中运行curl,我会得到简单的 200 OK

$ curl -o /dev/null -s -w "%{http_code}\n"  https://gitlab.com/secret/secret-repo/v2?go-get=1
200

你对如何调试这样的东西有什么想法吗?

-x
没有多大帮助

我尝试在另一台机器上重现此问题,但无法重现。即使使用同一台机器,当我运行 docker 映像时,

go mod
也会得到 200 OK

$ go mod download -x  gitlab.com/secret/secret-repo/v2@latest
# get https://proxy.golang.org/gitlab.com/secret/secret-repo/v2/@v/list
# get https://proxy.golang.org/gitlab.com/secret/secret-repo/v2/@v/list: 404 Not Found (2.142s)
# get https://gitlab.com/secret/secret-repo/v2?go-get=1
# get https://gitlab.com/secret/secret-repo/v2?go-get=1: 200 OK (0.215s)

我只是不知道如何进一步调试

go mod
。另外,它忽略 http_proxy 或 HTTP_PROXY 变量,因此我不知道如何正确地使其与 mitmproxy 一起使用。

我尝试过的其他事情:为另一个用户尝试相同的命令,它可以返回 200 OK。

当我登录到我的用户 shell 时,即使非侵入式

su myuser -s /bin/sh
具有几乎相同的环境,它仍然返回 404。我只是不知道如何进一步调试它。

go http-proxy go-modules
1个回答
0
投票

看起来您的

$HOME/.netrc
中有一些无效的 HTTP 凭据,因此当您
go mod download
您的私有模块时,go 命令使用这些凭据进行身份验证,给您一个 404。另一方面,curl 不使用您的默认情况下,.netrc 凭据(并且您测试的其他环境和 Docker 构建无法访问您的 .netrc),因此您会在那里得到 200 响应。

© www.soinside.com 2019 - 2024. All rights reserved.