我正在尝试使用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"
由于这个原因,我认为问题在于身份验证过程,因此我确保为个人访问令牌赋予适当的访问权限。任何帮助,将不胜感激。
谢谢!
答案 0 :(得分:1)
问题确实出在您的身份验证上。提供Authorization标头时,您需要指定身份验证的类型(您所说的是token
),然后是凭据。
但是,GitHub API需要基本身份验证,这要求您指定用冒号分隔的用户名和密码,并以base64编码结果。因此,如果您要将用户名指定为“ token”,而将令牌值指定为“ abc123”,那么您的Authorization标头将具有值Basic dG9rZW46YWJjMTIz
,该值是token:abc123
的base64编码。>
对于GitHub API,您可以将令牌用作用户名或密码,但是习惯上将令牌用作密码并为用户名填充一个虚拟值,例如“ token”,就像我上面所做的那样。