从Powershell返回404下载私有Github存储库

时间:2019-07-24 21:44:17

标签: git rest powershell github http-headers

我正在尝试使用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找不到错误。

根据Github,“ API支持RFC2617中定义的基本身份验证,但有一些细微差别。主要区别在于RFC要求未经身份验证的请求以401未经授权的响应来回答。在许多地方,这将揭示存在用户数据。相反,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"

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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