git - 使用 HTTP 请求检查 git repo 是否公开

标签 git gitlab http-headers httprequest

对于我的项目,我需要知道 git 存储库是否公开才能执行某些操作。 我首先想到使用 HTTP 请求,所以我使用 postman ,我尝试使用 HEAD 方法使用多个 URL。

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

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

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

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

最佳答案

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

如果存储库是公开的,您将得到 200。如果存储库是私有(private)的或不存在,您可能会得到 401。在您通过身份验证之前,大多数主要托管服务提供商不会提供有关私有(private)存储库是否存在的信息,因此无论哪种方式,您都会收到 401。

请注意,您不能使用HEAD 请求;在这种情况下,GitHub 会返回 405 Method Not Allowed。

示例: 开源代码库: 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

关于git - 使用 HTTP 请求检查 git repo 是否公开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54959589/

相关文章:

java - Apache 服务器作为 Jboss 问题的代理

java - 如何验证 Java 的 git 提交消息?

Git:如何从主分支中较早/较旧的提交创建新分支?

linux - GIT 从远程源 pull 忽略 SSH key - 要求密码

eclipse - GitLab + Eclipse + SSH - "Auth failed"或 "cannot open git-upload-pack"

git - 如何在本地 check out merge 请求,并创建新的本地分支?

python - 来自请求 Python 库的 HTTP 请求中缺少主机 header

javascript - 内容安全策略 (CSP) 如何工作?

git - 如何判断 git merge 是否可快进

git - 致命的 : could not read Username for 'https://gitlab.com' : terminal prompts disabled