DataFlex
DataFlex
REST Receive Response in Chunks
See more REST Examples
Demonstrates how to receive a REST HTTP response in chunks.Note: This example requires Chilkat 10.1.0 or greater.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoRest
Boolean iBTls
Integer iPort
Boolean iBAutoReconnect
Integer iStatusCode
String sOutputFile
Handle hoFac
Variant vBd
Handle hoBd
Integer iStatus
String sTemp1
Integer iTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatRest)) To hoRest
If (Not(IsComObjectCreated(hoRest))) Begin
Send CreateComObject of hoRest
End
// Connect to the web server
Move True To iBTls
Move 443 To iPort
Move True To iBAutoReconnect
Get ComConnect Of hoRest "chilkatsoft.com" iPort iBTls iBAutoReconnect To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// Send the request.
// This can be *any* kind of request: POST, GET, PUT, etc. using *any* of the Chilkat REST methods that send requests.
// For this example, we'll just GET a simple XML document that is about 274K in size.
Get ComSendReqNoBody Of hoRest "GET" "/hamlet.xml" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// Get the response header.
Get ComReadResponseHeader Of hoRest To iStatusCode
If (iStatusCode < 0) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
Showln "response status code = " iStatusCode
Move "c:/temp/qa_output/hamlet.xml" To sOutputFile
Get Create (RefClass(cComCkFileAccess)) To hoFac
If (Not(IsComObjectCreated(hoFac))) Begin
Send CreateComObject of hoFac
End
Get ComOpenForWrite Of hoFac sOutputFile To iSuccess
If (iStatusCode < 0) Begin
Get ComLastErrorText Of hoFac To sTemp1
Showln sTemp1
Procedure_Return
End
// Get the response in chunks.
// (Note: There are more efficient ways to simply download a file from a web server, such as by calling Chilkat's Http.Download method.
// The purpose of this method is to show how to receive a response chunk-by-chunk.)
Get Create (RefClass(cComChilkatBinData)) To hoBd
If (Not(IsComObjectCreated(hoBd))) Begin
Send CreateComObject of hoBd
End
Move 1 To iStatus
While (iStatus = 1)
// Read a minimum of 16000 bytes.
// Note: Because of TLS message lengths, or the possibility of the response being either compressed (gzip/deflate) or in the HTTP chunked encoding,
// the amount of data received in each call can be greater than the specified min size.
// Chilkat will return from the call as soon as it has received an amount equal to or more than the specified size,
// except for the very last chunk, which can be less that the min size or even 0 bytes.
// The status will be one of three values:
// -1 = error
// 0 = received the last chunk of the response.
// 1 = received a chunk, and more chunks are coming..
// The received data is *appended* to the contents of the BinData object.
Get pvComObject of hoBd to vBd
Get ComReadRespChunkBd Of hoRest 16000 vBd To iStatus
If (iStatus >= 0) Begin
Get ComNumBytes Of hoBd To iTemp1
Showln "Received chunk: " iTemp1 " bytes"
Get pvComObject of hoBd to vBd
Get ComFileWriteBd Of hoFac vBd 0 0 To iSuccess
Get ComClear Of hoBd To iSuccess
End
Loop
Send ComFileClose To hoFac
Showln "Success."
End_Procedure