如何使用 Powershell 获取 Github 发布资产的二进制版本?
How can I get the binary version of a Github Release Asset using Powershell?
我正在关注 GitHub Releases 的文档,但我得到的只是资产内容。
这是我的 powershell 脚本:
$gitHubRepository = "<repo>"
$gitHubUsername = "<username>"
$gitHubApiKey = "<apikey>"
# Locate Latest GitHub Release
$releaseParams = @{
Uri = "https://api.github.com/repos/$gitHubUsername/$gitHubRepository/releases";
Method = 'GET';
Headers = @{
Authorization = 'Basic ' + [Convert]::ToBase64String(
[Text.Encoding]::ASCII.GetBytes($gitHubApiKey + ":x-oauth-basic")
);
}
ContentType = 'application/json';
Body = (ConvertTo-Json $releaseData -Compress)
}
$result = Invoke-RestMethod @releaseParams
$tag = $result.tag_name[0]
Write-Host "Release $tag Found."
$asset = $result.assets[0].url
$ZipFile = $result.assets[0].name
$asset
$releaseAssetParams = @{
Uri = $asset;
Method = 'GET';
Headers = @{
Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($gitHubApiKey + ":x-oauth-basic"));
}
ContentType = 'application/octet-stream';
}
Invoke-RestMethod @releaseAssetParams -OutFile $ZipFile
执行此脚本(变量设置正确),输出资产内容,而不是预期的二进制 (zip) 文件。
内容类型没有被识别吗?
您需要在 Accept
请求 header 中指定 application/octet-stream
,而不是 Content-Type
请求 header,因为您想告诉服务器什么你想接受,而不是你发送的内容。
因此,您需要像这样发送 header:
Accept: application/octet-stream
而不是
Content-Type: application/octet-stream
来自 API 的响应将重定向到具有实际资产的 URL,因此您需要发出另一个请求(这是预期行为)。如果您 运行 遇到问题,let us know。
我正在关注 GitHub Releases 的文档,但我得到的只是资产内容。
这是我的 powershell 脚本:
$gitHubRepository = "<repo>"
$gitHubUsername = "<username>"
$gitHubApiKey = "<apikey>"
# Locate Latest GitHub Release
$releaseParams = @{
Uri = "https://api.github.com/repos/$gitHubUsername/$gitHubRepository/releases";
Method = 'GET';
Headers = @{
Authorization = 'Basic ' + [Convert]::ToBase64String(
[Text.Encoding]::ASCII.GetBytes($gitHubApiKey + ":x-oauth-basic")
);
}
ContentType = 'application/json';
Body = (ConvertTo-Json $releaseData -Compress)
}
$result = Invoke-RestMethod @releaseParams
$tag = $result.tag_name[0]
Write-Host "Release $tag Found."
$asset = $result.assets[0].url
$ZipFile = $result.assets[0].name
$asset
$releaseAssetParams = @{
Uri = $asset;
Method = 'GET';
Headers = @{
Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($gitHubApiKey + ":x-oauth-basic"));
}
ContentType = 'application/octet-stream';
}
Invoke-RestMethod @releaseAssetParams -OutFile $ZipFile
执行此脚本(变量设置正确),输出资产内容,而不是预期的二进制 (zip) 文件。
内容类型没有被识别吗?
您需要在 Accept
请求 header 中指定 application/octet-stream
,而不是 Content-Type
请求 header,因为您想告诉服务器什么你想接受,而不是你发送的内容。
因此,您需要像这样发送 header:
Accept: application/octet-stream
而不是
Content-Type: application/octet-stream
来自 API 的响应将重定向到具有实际资产的 URL,因此您需要发出另一个请求(这是预期行为)。如果您 运行 遇到问题,let us know。