且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从BitBucket Rest API v2.0获取文件

更新时间:2023-02-14 23:20:00

为了后代,您不想使用以下内容从bitbucket下载单个文件:

For posterities sake, you don't want to use the following to download an individual file from bitbucket:

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

(下载"用于下载整个回购文件,例如.zip文件)

("Downloads" is to download entire repo files like a .zip file)

相反,您想做:

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,您可以执行以下操作:

If you're trying to use Invoke-RestRequest (in powershell) note there are some extra steps. With the old 1.0 API you could do:

$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被禁止.

With the new 2.0 API that no longer works. Powershell's Invoke-RestMethod waits for a 401 response before sending the credentials, and the new 2.0 bitbucket api never provides one, so credentials never get sent causing a 403 forbidden.

要解决此问题,您必须使用以下丑陋的方法来强制Invoke-RestMethod立即在Authorization标头中发送凭据:

To work around that you have to use the following ugly hack to force Invoke-RestMethod to send the credentials immediately in an Authorization header:

$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 

希望这对将来有帮助的人有帮助!

Hopefully that helps someone else out in the future!

感谢@Jim Redmond的帮助.

Thanks @Jim Redmond for the help.