如何使用cURL从私有GitHub Release下载tarball或zipball?
如何用cURL从私有GitHub仓库的Release中下载源码压缩包(tarball/zipball)?
问题背景
需要跨平台(初始测试环境为Windows CMD)使用cURL,从私有GitHub仓库的Release中下载tarball或zipball,但多次尝试均未成功。
已尝试的操作及问题
1. 调用GitHub API获取Release信息
执行以下命令可返回Release的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
响应中返回的压缩包地址为:
"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",
2. 直接请求API返回的压缩包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
3. 请求GUI页面复制的压缩包URL
从浏览器Release页面复制Source code (zip)的链接,执行命令后返回空zip包:
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
4. 添加-L参数后的尝试
添加-L参数处理重定向后,得到一个20KB的文件,但内容为不可读乱码,无法正常使用:
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
正确的下载命令及说明
方法1:通过GitHub API的压缩包地址下载
需要确保请求头包含正确的Accept字段,并且保留-L参数处理重定向:
# 下载tarball curl -L -O -H "Accept: application/vnd.github.v3.raw" -H "Authorization: Bearer ghp_long8alpha8numeric8token" https://api.github.com/repos/AccountName/RepoName/tarball/vers.a.b.c --ssl-no-revoke # 下载zipball curl -L -O -H "Accept: application/vnd.github.v3.raw" -H "Authorization: Bearer ghp_long8alpha8numeric8token" https://api.github.com/repos/AccountName/RepoName/zipball/vers.a.b.c --ssl-no-revoke
关键说明:
- 添加
Accept: application/vnd.github.v3.raw头,确保GitHub返回原始压缩数据而非JSON格式 -L参数必须保留,因为API地址会重定向到实际的压缩包存储地址- 可使用
-o指定自定义文件名,比如-o repo.tar.gz,避免默认的无后缀文件名
方法2:直接使用GUI风格的下载地址
对于https://github.com/AccountName/RepoName/archive/refs/tags/vers.a.b.c.zip这类地址,需要调整授权头格式,同时保留-L:
curl -L -O -H "Authorization: token ghp_long8alpha8numeric8token" https://github.com/AccountName/RepoName/archive/refs/tags/vers.a.b.c.zip --ssl-no-revoke
关键说明:
- 此地址属于GitHub网页端下载链接,授权头格式需改为
token <你的令牌>,而非Bearer <你的令牌> - 无需指定
X-GitHub-Api-Version头,因为这不是API端点
额外注意事项
- 确保使用的GitHub令牌(ghp_开头)拥有repo权限,能够访问目标私有仓库
- Windows CMD中执行命令时,需使用双引号包裹请求头内容,避免转义问题
- 若下载仍有问题,可添加
-v参数查看请求详情,排查重定向或权限故障
内容的提问来源于stack exchange,提问作者CodeMed
相关产品推荐
相关产品推荐

