GitHub Enterprise批量下载资产遇异常:curl请求返回406或仅得元数据
解决 curl 访问仓库资产下载链接返回 406 的问题
核心原因
HTTP 406 错误意味着服务器无法生成匹配请求头 Accept 指定格式的响应。浏览器会自动发送适配的 Accept 头,而 curl 默认的头字段范围较窄,可能不匹配资产实际类型;同时直接访问下载链接时,必须显式带上认证信息(即便你的 token 已有 repo 权限)。
具体解决步骤
- 设置兼容的 Accept 头:在 curl 命令中添加
-H "Accept: */*",允许服务器返回任意格式内容,覆盖 curl 默认的窄范围 Accept 设置。 - 传递认证信息:直接访问
browser_download_url时,通过请求头携带 token,添加-H "Authorization: token YOUR_REPO_TOKEN"。 - 跟随重定向:部分仓库的下载链接会触发跳转,加上
-L参数让 curl 自动跟随重定向(浏览器默认会处理跳转)。 - 正确保存文件:用
-O参数让 curl 自动使用 URL 中的文件名保存资产,或用-o 自定义文件名指定保存路径。
完整命令示例
curl -L -H "Authorization: token YOUR_REPO_TOKEN" -H "Accept: */*" -O "YOUR_BROWSER_DOWNLOAD_URL"
额外排查点
- 确认 token 权限:检查 token 是否包含完整的
repo权限(涵盖repo:status、repo_deployment、私有仓库访问权限等)。 - 匹配具体 MIME 类型:如果明确资产类型,可将
Accept头设为更精准的值,比如二进制文件用Accept: application/octet-stream,压缩包用Accept: application/zip,稳定性会更好。
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

