git - 从 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"
出于这个原因,我认为问题出在身份验证过程中,我已确保为个人访问令牌提供适当的访问权限。对此的任何帮助将不胜感激。
谢谢!
解决方案
问题确实出在您的身份验证上。当您提供 Authorization 标头时,您需要指定身份验证类型(您所说的是token
),然后是凭据。
但是,GitHub API 需要基本身份验证,这要求您指定由冒号分隔的用户名和密码,结果 base64 编码。因此,如果您想将用户名指定为“token”,将令牌值指定为“abc123”,那么您的 Authorization 标头将具有 value Basic dG9rZW46YWJjMTIz
,它的 base64 编码为token:abc123
.
对于 GitHub API,您可以将令牌用作用户名或密码,但习惯上将其用作密码并为用户名填写一个虚拟值,例如“令牌”,就像我在上面所做的那样。
推荐阅读
- ruby - 如何在静态数组中添加创建的对象?
- linux - Git结帐分支不起作用
- pdf - PDF-文本块可以包含 2 个或更多单词吗?
- git - 从 git 获取提交中行更改的详细信息的方法(即删除第 3 行,第 4 行变为第 3 行)
- c - 将 IRAM 的优先级赋予 C 中的特定源文件
- security - 对锚点服务器的远程身份验证
- python - Django 在 TextField 中搜索
- c# - 在 MVC Core 中被 AuthenticationHandler 重定向后如何在 httpcontext 中获取状态码
- react-native - console.log 不适用于 react-native
- angular - [Angular-CLI-6] 无法确定“服务”目标的单个项目