首页 > 解决方案 > 从 Powershell 下载私有 Github 存储库返回 404

问题描述

我正在尝试使用 powershell 命令从 Github 下载私有存储库。我需要将文件下载为 zip,并且不能使用任何 Git 命令。这是我正在使用的脚本:

$AccessToken = "XXXXXXXXX"

$headers = @{}
$headers.Add("Authorization", "token $AccessToken")

$gurl = "https://api.github.com/repos/user/repo/zipball/master"

Invoke-WebRequest -Headers $headers -Uri $gurl -UseBasicParsing -OutFile "C:\testing\repo.zip"

运行此程序时,我收到 404 not found 错误。

根据 Github 的说法,“API 支持 RFC2617 中定义的基本身份验证,但有一些细微差别。主要区别在于 RFC 要求未经身份验证的请求以 401 Unauthorized 响应来回答。在许多地方,这会泄露用户数据的存在。相反,GitHub API 以 404 Not Found 响应”

为公共存储库运行不带标头的命令不会产生任何问题。例如,


$gurl = "https://api.github.com/repos/business/public-repo/zipball/master"

Invoke-WebRequest -Headers $headers -Uri $gurl -UseBasicParsing -OutFile "C:\testing\repo.zip"

出于这个原因,我认为问题出在身份验证过程中,我已确保为个人访问令牌提供适当的访问权限。对此的任何帮助将不胜感激。

谢谢!

标签: gitrestpowershellgithubhttp-headers

解决方案


问题确实出在您的身份验证上。当您提供 Authorization 标头时,您需要指定身份验证类型(您所说的是token),然后是凭据。

但是,GitHub API 需要基本身份验证,这要求您指定由冒号分隔的用户名和密码,结果 base64 编码。因此,如果您想将用户名指定为“token”,将令牌值指定为“abc123”,那么您的 Authorization 标头将具有 value Basic dG9rZW46YWJjMTIz,它的 base64 编码为token:abc123.

对于 GitHub API,您可以将令牌用作用户名或密码,但习惯上将其用作密码并为用户名填写一个虚拟值,例如“令牌”,就像我在上面所做的那样。


推荐阅读