Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(AutoIt) OneDrive -- Streaming REST Download to FileDownloads the contents of a DriveItem directly to a file in the local filesystem using the Chilkat REST class. Note: This example requires Chilkat v9.5.0.69 or greater.
; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. $oRest = ObjCreate("Chilkat_9_5_0.Rest") ; Use your previously obtained access token here: ; See the following examples for getting an access token: ; Get Microsoft Graph OAuth2 Access Token (Azure AD v2.0 Endpoint). ; Get Microsoft Graph OAuth2 Access Token (Azure AD Endpoint). ; Refresh Access Token (Azure AD v2.0 Endpoint). ; Refresh Access Token (Azure AD Endpoint). ; First connect to graph.microsoft.com. If there's a connectivity problem, we'll find out here. Local $bSuccess = $oRest.Connect("graph.microsoft.com",443,True,True) If ($bSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf ; (Make sure your token was obtained with the FilesRead or Files.ReadWrite scope.) $oOauth2 = ObjCreate("Chilkat_9_5_0.OAuth2") $oOauth2.AccessToken = "MICROSOFT_GRAPH_ACCESS_TOKEN" $oRest.SetAuthOAuth2($oOauth2) ; Send the GET request to download the file. Local $sUriPath = "/v1.0/me/drive/root:/Misc/wildlife/penguins.jpg:/content" $bSuccess = $oRest.SendReqNoBody("GET",$sUriPath) If ($oRest.LastMethodSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf ; NOTE: This way of doing the HTTP GET (i.e. download) may be more cumbersome, but it ; allows for finer control of handling errors. The connection establishment, the sending of the ; request, the reading of the response header, and the reading of the response body (i.e. the file data) ; are handled by separate method calls. If the response header indicates an error, we can read ; the response body and treat it differently than if reading the file data. ; Read the response header. Local $iStatusCode = $oRest.ReadResponseHeader() ConsoleWrite("Response Status Code = " & $iStatusCode & @CRLF) If ($iStatusCode = 302) Then ; This is a redirect. Read the response body, if any, and then follow the redirect. ; Usually the response body will be empty for a redirect, but we need to be sure to read ; the response body just in case it exists. $oDiscard = ObjCreate("Chilkat_9_5_0.BinData") $oRest.ReadRespBd($oDiscard) $oRest.Disconnect(10) ; For OneDrive, the redirect URL does not need authorization because the only way ; to have obtained the direct download URL is from an authenticated request. ; In fact, if we leave the authentication present, the GET request to the redirect URL will fail. ; Note: The ClearAuth method is introduced in v9.5.0.69. $oRest.ClearAuth() ; Follow the redirect URL... Local $oRedirectUrl = $oRest.RedirectUrl() ConsoleWrite("Redirect Host: " & $oRedirectUrl.Host & @CRLF) ConsoleWrite("Redirect URI Path: " & $oRedirectUrl.PathWithQueryParams & @CRLF) $bSuccess = $oRest.Connect($oRedirectUrl.Host,$oRedirectUrl.Port,$oRedirectUrl.Ssl,True) If ($bSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf ; Send the request.. $bSuccess = $oRest.SendReqNoBody("GET",$oRedirectUrl.Path) If ($oRest.LastMethodSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf $iStatusCode = $oRest.ReadResponseHeader() ConsoleWrite($oRest.LastErrorText & @CRLF) ConsoleWrite("Redirect Response Status Code = " & $iStatusCode & @CRLF) EndIf If ($iStatusCode >= 300) Then ; Read the error response body. $oSbJson = ObjCreate("Chilkat_9_5_0.StringBuilder") $bSuccess = $oRest.ReadRespSb($oSbJson) If ($bSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf $oJsonErr = ObjCreate("Chilkat_9_5_0.JsonObject") $oJsonErr.EmitCompact = False $oJsonErr.LoadSb($oSbJson) ConsoleWrite($oJsonErr.Emit() & @CRLF) Exit EndIf ; Stream the response body directly to a local file. Local $sLocalPath = "qa_output/penguins.jpg" $oStream = ObjCreate("Chilkat_9_5_0.Stream") $oStream.SinkFile = $sLocalPath $bSuccess = $oRest.ReadRespBodyStream($oStream,True) If ($bSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf ConsoleWrite("Successfully streamed a OneDrive file to the local filesystem." & @CRLF) |
© 2000-2023 Chilkat Software, Inc. All Rights Reserved.