Sample code for 30+ languages & platforms
Xbase++

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 Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oRest
LOCAL nBTls
LOCAL nPort
LOCAL nBAutoReconnect
LOCAL nStatusCode
LOCAL cOutputFile
LOCAL oFac
LOCAL oBd
LOCAL nStatus

nSuccess := 0

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

oRest := CreateObject("Chilkat.Rest")

//  Connect to the web server
nBTls := 1
nPort := 443
nBAutoReconnect := 1
nSuccess := oRest:Connect("chilkatsoft.com", nPort, nBTls, nBAutoReconnect)
IF (nSuccess == 0)
    ? oRest:LastErrorText
    oRest:destroy()
    RETURN
ENDIF

//  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.

nSuccess := oRest:SendReqNoBody("GET", "/hamlet.xml")
IF (nSuccess == 0)
    ? oRest:LastErrorText
    oRest:destroy()
    RETURN
ENDIF

//  Get the response header.
nStatusCode := oRest:ReadResponseHeader()
IF (nStatusCode < 0)
    ? oRest:LastErrorText
    oRest:destroy()
    RETURN
ENDIF

? "response status code = " + Str(nStatusCode)

cOutputFile := "c:/temp/qa_output/hamlet.xml"

oFac := CreateObject("Chilkat.FileAccess")
nSuccess := oFac:OpenForWrite(cOutputFile)
IF (nStatusCode < 0)
    ? oFac:LastErrorText
    oRest:destroy()
    oFac:destroy()
    RETURN
ENDIF

//  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.)
oBd := CreateObject("Chilkat.BinData")
nStatus := 1
DO WHILE nStatus == 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.
    nStatus := oRest:ReadRespChunkBd(16000, oBd)
    IF (nStatus >= 0)
        ? "Received chunk: " + Str(oBd:NumBytes) + " bytes"
        oFac:FileWriteBd(oBd, 0, 0)
        oBd:Clear()
    ENDIF

ENDDO

oFac:FileClose()

? "Success."

oRest:destroy()
oFac:destroy()
oBd:destroy()