curl zipball or tarball from private GitHub release [已关闭]

e3bfsja2  于 2023-10-19  发布在  Git
关注(0)|答案(1)|浏览(163)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
2个月前关闭。
Improve this question
为了从私有GitHub存储库的GitHub版本下载二进制tarball或zipball,必须使用什么特定的语法?
以下是我们所尝试的:
从这个链接上的文档开始,我一直在追求以下不希望的失败结果,如下所述:

以下来自docs的命令给出了JSON响应,但没有工件:

curl -L -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ghp_long8alpha8numeric8token" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/AccountName/RepoName/releases/tags/vers.a.b.c --ssl-no-revoke

前面的命令返回的zipball和tarball地址如下:

"tarball_url": "https://api.github.com/repos/AccountName/RepoName/tarball/vers.a.b.c",
"zipball_url": "https://api.github.com/repos/AccountName/RepoName/zipball/vers.a.b.c",

** curl 前面命令给出的URL**

接下来,我尝试了下面这行代码,它将前面命令输出的tarball_url放入curl命令中。但下面的行返回一个名为vers.a.b.c的0KB空文件

curl -O -H "Authorization: Bearer ghp_long8alpha8numeric8token" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/AccountName/RepoName/tarball/vers.a.b.c --ssl-no-revoke

** curl GitHub网站GUI中给出的URL**

最后,我在www.example.com GUI中的Web浏览器中导航GitHub.com到私有存储库的发布页面,右键单击Source code (zip)链接并选择“复制链接地址”以获取为GitHub UI网站用户提供zipball的URL。我使用适用于GUI的点击式人类用户的URL组装了以下命令。但是下面的命令返回一个空的zipball。

curl -O -H "Authorization: Bearer ghp_long8alpha8numeric8token" -H "X-GitHub-Api-Version: 2022-11-28" https://github.com/AccountName/RepoName/archive/refs/tags/vers.a.b.c.zip --ssl-no-revoke

要求是跨平台并使用cURL。我们测试的初始环境必须是windows cmd。

BK2204的建议

根据bk2204的建议,我尝试了以下命令:

curl -L -O -H "Authorization: Bearer ghp_long8alpha8numeric8token" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/AccountName/RepoName/tarball/vers.a.b.c --ssl-no-revoke

结果是一个20 KB的文本文件,其中包含311个不可读的行。不确定不可读的行是否表示压缩数据。但无论如何,该文件都无法以其当前形式使用。

必须使用什么精确的语法才能成功下载tarball或zipball?

oalqel3c

oalqel3c1#

您使用的第二组curl命令(获取tarball_urlzipball_url值的命令)需要使用-L选项来curl,因为它们将始终重定向到另一个位置,而-L选项指示应遵循重定向。
在本例中,您可以通过使用-v选项curl看到您正在接收一个3xx请求,curl将打印发送和接收的标头。
在GitHub上提供存档和原始文件的服务位于一个单独的域上,重定向将指向该域上的URL codeload.github.com。但是,您使用API是正确的,因为codeload.github.com不使用相同类型的令牌,因此通过使用您的请求访问API,您收到的重定向将包含一个临时令牌,codeload.github.com将验证该令牌以给予您所需的tarball或zipball。
您不应该将域github.com用于自动请求(包括归档),因为该域不是为处理自动请求而设计的,并且具有比API更严格的速率限制。向主域(HTTPS Git请求之外)发出大量自动请求可能会导致您在一段时间内收到429。
要使用的具体语法如下:

curl -H "Authorization: Bearer $TOKEN" -L \
     -o foo.tar.gz \
     https://api.github.com/repos/$OWNER/$NAME/tarball/$REV

您需要替换$TOKEN$OWNER$NAME$REV。相反,您可以根据需要将URL替换为从tarball_urlzipball_url接收的URL。
请注意,如果您没有收到预期的结果,您可能没有正确进行身份验证,您应该使用-v选项来查看您收到的状态代码。我已经验证了这个语法可以从我的私有存储库下载。

相关问题