Получение файла из BitBucket Rest API v2.0 - PullRequest
0 голосов
/ 31 октября 2018

У меня есть скрипт, который получает файл из GIT с помощью API REST bitbucket (1.0), однако он недавно перестал работать. Я предполагаю, что это может быть связано с устареванием API REST v1, но я не уверен.

В любом случае, я пытаюсь получить файл с помощью нового API REST 2.0, но, похоже, не могу понять синтаксис правильно, так как запрос постоянно терпит неудачу.

Я начинаю с curl, так как его проще всего проверить. Вот что я пытаюсь:

curl -u myusername@mydomain.com "https://api.bitbucket.org/2.0/repositories/MyCompany/myrepo/downloads/Scripts/Environment Setup/test.txt"

Enter host password for user 'myusername@mydomain.com': redacted

{"type": "error", "error": {"message": "Resource not found", "detail": "There is no API hosted at this URL.\n\nFor information about our API's, please refer to the documentation at: https://developer.atlassian.com/bitbucket/api/2/reference/"}}

Вот справочная документация, которую я использую: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/downloads/%7Bfilename%7D

Может быть, я использую не ту функцию? Я не уверен.

1 Ответ

0 голосов
/ 01 ноября 2018

Для потомков вы не хотите использовать следующее для загрузки отдельного файла из bitbucket:

https://api.bitbucket.org/2.0/repositories/MyCompany/myrepo/downloads/path/to/your/file.txt

(«Загрузки» означает загрузку целых файлов репо, например, ZIP-файла)

Вместо этого вы хотите сделать:

curl --user myuser@mydomain.com:password "https://api.bitbucket.org/2.0/repositories/MyCompany/myrepo/src/master/path/to/file.txt"

Если вы пытаетесь использовать Invoke-RestRequest (в powershell), обратите внимание, что есть несколько дополнительных шагов. Со старым 1.0 API вы могли сделать:

$cred = Get-Credential

$uri = "https://api.bitbucket.org/1.0/repositories/MyCompany/$($filepath)"

# Get the files from bitbucket (GIT)
Invoke-RestMethod -Credential $cred -Uri $uri -Proxy $proxyUri -OutFile $destination 

С новым 2.0 API, который больше не работает. Invoke-RestMethod от Powershell ждет ответа 401 перед отправкой учетных данных, и новый API-интерфейс 2.0 bitbucket никогда его не предоставляет, поэтому учетные данные никогда не отправляются, что приводит к запрету 403.

Чтобы обойти это, вы должны использовать следующий уродливый хак, чтобы заставить Invoke-RestMethod немедленно отправлять учетные данные в заголовок авторизации:

$cred = Get-Credential


$uri = "https://api.bitbucket.org/2.0/repositories/MyCompany/$($filepath)"
$username = ($cred.GetNetworkCredential()).username
$password = ($cred.GetNetworkCredential()).password
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

# Get the files from bitbucket (GIT)
Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Uri $uri -Proxy $proxyUri -OutFile $destination 

Надеюсь, это поможет кому-то еще в будущем!

Спасибо @Джим Редмонду за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...