我有一个脚本,该脚本使用bitbucket REST API(1.0)从GIT抓取文件,但是该脚本最近已停止工作。我认为这可能是由于v1 REST API被折旧了,但我不确定。
无论如何,我正在尝试使用新的2.0 REST API检索文件,但由于请求不断失败,因此似乎语法不正确。
因为最容易测试,所以我从卷曲开始。这就是我正在尝试的:
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/"}}
也许我使用了错误的功能?我不确定。
答案 0 :(得分:0)
为了后代,您不想使用以下内容从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。 Powershell的Invoke-RestMethod在发送凭据之前会等待401响应,而新的2.0 bitbucket api从不提供凭据,因此凭据也永远不会发送,从而导致403被禁止。
要变通解决此问题,您必须使用以下丑陋的hack强制Invoke-RestMethod立即在Authorization标头中发送凭据:
$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
希望这对将来有帮助的人有帮助!
感谢@Jim Redmond的帮助。
答案 1 :(得分:0)
您还可以使用 PowerShell 模块 BitbucketServerAutomation。没有大量的 cmdlet,它们确实有 Get-BBServerFile 和 Get-BBServerFileContent。我发现它写得很好,非常有用,并且会定期更新。如果您需要它没有的命令,则可以使用 Invoke-BBServerRestMethod cmdlet。