2015-09-25 2 views
1

Я следую документам от GitHub Releases, но все, что я когда-либо получал, это содержимое активов.Как получить бинарную версию Github Release Asset с помощью Powershell?

Вот мой сценарий 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

Вы должны указать application/octet-stream в заголовке Accept запроса, а не заголовок Content-Type запрос, потому что вы хотите, чтобы сообщить серверу, что вы хотите принять, не то, что вы посылаете.

Таким образом, вы должны послать заголовок так:

Accept: application/octet-stream 

и не

Content-Type: application/octet-stream 

Ответ от API будет редирект на URL, который имеет фактический актив, так вам нужно будет сделать еще один запрос (это ожидаемое поведение). Если у вас возникают проблемы, let us know.

+0

Отлично работает с Powershell 4.0 после того, как исправлена ​​ошибка, позволяющая устанавливать заголовки Accept Headers. –

+0

@SamTyson Затем, не забудьте принять ответ. '' :-) –

Смежные вопросы