使用PowerShell下载GitHub私有仓库ZIP包时触发(406) Not Acceptable错误
406 报错根因
这个报错是请求头和资源校验不匹配直接触发的:
- 代码里写的
Accept值application/vnd.github.v3.raw,是GitHub专门给单文件原始内容拉取接口用的响应格式,和仓库归档ZIP包的资源类型完全不匹配 - 浏览器能正常下载,是因为浏览器默认发送的Accept是多类型通配值,没有硬卡响应格式,不会触发GitHub的内容协商拦截
调整方案
- 删掉代码里错误的自定义
Accept头,或者直接把这个字段值改成通配的*/*,绕开严格的格式匹配校验 - 把原授权头里的
Token $token格式替换成Bearer $token,提升GitHub对私仓归档接口的权限识别兼容性 - 保留
Invoke-RestMethod的-OutFile参数配置即可,这个参数会直接把服务器返回的二进制流写入本地文件,不需要额外指定响应内容类型
修正后可直接运行的代码
$token = "MyGitToken"; $repo = "https://github.com/my-private-repo/archive/master.zip"; $targetFile = "./master.zip"; $restRequest = @{ Method = "Get" Uri = "$repo" Headers = @{ Authorization = "Bearer $token" # 已移除原配置中会触发406的错误Accept头 } }; Invoke-RestMethod @restRequest -OutFile $targetFile;
补充注意事项
- 不要手动给ZIP下载请求硬加
Accept: application/zip的固定值,旧版GitHub接口对这个固定值的校验逻辑存在兼容问题,依然可能触发406,要么删除自定义Accept头,要么设为通配值的兼容性最好 - 如果目标分支不是master,记得把URI路径里的分支名替换为实际值,避免衍生404报错
内容的提问来源于stack exchange,提问作者user007
相关产品推荐
相关产品推荐

