2015-09-25 68 views
1

我正在关注GitHub Releases的文档,但我所得到的全部是资产内容。如何使用Powershell获取Github发行资产的二进制版本?

这里是我的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)文件符合市场预期。

内容类型未被识别吗?

回答

2

您需要在Accept请求头,而不是一个Content-Type请求标头指定application/octet-stream,因为你要告诉你,你接受,你不能送什么什么的服务器。

所以,你需要发送一个报头是这样的:

Accept: application/octet-stream 

,而不是

Content-Type: application/octet-stream 

来自API的响应将是一个重定向到具有实际资产的URL,所以你需要提出另一个请求(这是预期的行为)。如果遇到问题,let us know

+0

在修复了不允许设置Accept Header的错误后,与Powershell 4.0协同工作。 –

+0

@SamTyson然后,不要忘记接受答案。 '':-) –