检查git repo是否通过HTTP请求公开

Nul*_*lji 4 git httprequest http-headers

对于我的项目,我需要知道git repo是否公开。我首先想到要使用HTTP请求,所以我使用的是邮递员,并且尝试使用HEAD方法处理多个URL。

当我发送请求时,看不到标题中的内容可以指示我是否失败。

当我向github发送一个私有项目的请求时,我收到状态404,因此对我来说是完美的,因为我知道这是一个私有项目。

但是,当我为gitlab执行此操作时,我收到状态200,然后被重定向。

我想知道是否有解决方案。

bk2*_*204 5

通常,最简单的方法是GET在附加/info/refs?service=git-upload-pack到URL 之后执行请求。这就是Git用于获取参考信息的端点。

如果存储库是公共的,则将得到200。如果存储库是私有的或不存在,则可能会得到401。大多数主要的托管服务提供商只有在您通过身份验证后才提供有关是否存在私有存储库的信息,因此您将以两种方式获得401。

请注意,您不能使用HEAD请求。在这种情况下,GitHub返回不允许的405方法。

示例: 开源存储库:https : //gitlab.com/gitlab-org/gitlab-ce.git

{GET}: https//gitlab.com/gitlab-org/gitlab-ce.git/info/refs?service = git-upload- pack

范例401:

wget $URL
Connecting to gitlab.com (35.231.145.151:80)
Connecting to gitlab.com (35.231.145.151:443)
wget: server returned error: HTTP/1.1 401 Unauthorized

echo $?
1
Run Code Online (Sandbox Code Playgroud)