![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(AutoIt) REST Read Response with Stream APIDemonstrates how to make a REST call that returns a binary body, and to receive the body through a stream API.
; 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") ; Connect to the Amazon AWS REST server. Local $bTls = True Local $iPort = 443 Local $bAutoReconnect = True Local $bSuccess = $oRest.Connect("s3.amazonaws.com",$iPort,$bTls,$bAutoReconnect) ; ---------------------------------------------------------------------------- ; Important: For buckets created in regions outside us-east-1, ; there are three important changes that need to be made. ; See Working with S3 Buckets in Non-us-east-1 Regions for the details. ; ---------------------------------------------------------------------------- ; Provide AWS credentials for the REST call. $oAuthAws = ObjCreate("Chilkat_9_5_0.AuthAws") $oAuthAws.AccessKey = "AWS_ACCESS_KEY" $oAuthAws.SecretKey = "AWS_SECRET_KEY" $oAuthAws.ServiceName = "s3" $bSuccess = $oRest.SetAuthAws($oAuthAws) ; Set the bucket name via the HOST header. ; In this case, the bucket name is "chilkat100". $oRest.Host = "chilkat100.s3.amazonaws.com" ; Send the request to download the JPG. $bSuccess = $oRest.SendReqNoBody("GET","/starfish.jpg") If ($bSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf ; Read the response header. Local $iResponseStatusCode = $oRest.ReadResponseHeader() If ($iResponseStatusCode < 0) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Exit EndIf ConsoleWrite("Response status code = " & $iResponseStatusCode & @CRLF) ; We expect a 200 response status if the JPG data is coming. ; Otherwise, we'll get a string response body with an error message(or no response body). If ($iResponseStatusCode <> 200) Then Local $sErrResponse = $oRest.ReadRespBodyString() If ($oRest.LastMethodSuccess <> True) Then ConsoleWrite($oRest.LastErrorText & @CRLF) Else ConsoleWrite($sErrResponse & @CRLF) EndIf Exit EndIf $oBodyStream = ObjCreate("Chilkat_9_5_0.Stream") ; Set a 10 second read timeout for the stream. ; (Give up if no data arrives within 10 seconds after calling a read method.) $oBodyStream.ReadTimeoutMs = 10000 ; Create a background thread task to read the response body (which feeds ; it to the bodyStream object.) Local $oReadResponseBodyTask = $oRest.ReadRespBodyStreamAsync($oBodyStream,True) ; Start the task. $bSuccess = $oReadResponseBodyTask.Run() ; The application can now read the bodyStream... While ($oBodyStream.EndOfStream <> True) ; Read the next chunk of bytes (whatever is immediately available, ; or wait for more data (up to 10 seconds because we set the stream's ReadTimeoutMs property) Local $oNextChunk = $oBodyStream.ReadBytes() If ($oBodyStream.LastMethodSuccess <> True) Then ConsoleWrite("Failed to receive more response data." & @CRLF) ; Make sure the background task is aborted/cancelled. $bSuccess = $oReadResponseBodyTask.Cancel() Exit EndIf ; OK.. the app has the next chunk of the body, and may do whatever it wishes with it... Wend ConsoleWrite("Successfully received the entire response body." & @CRLF) |
||||
© 2000-2026 Chilkat Software, Inc. All Rights Reserved.