Sample code for 30+ languages & platforms
Tcl

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 Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set rest [new_CkRest]

# Connect to the web server
set bTls 1
set port 443
set bAutoReconnect 1
set success [CkRest_Connect $rest "chilkatsoft.com" $port $bTls $bAutoReconnect]
if {$success == 0} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    exit
}

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

set success [CkRest_SendReqNoBody $rest "GET" "/hamlet.xml"]
if {$success == 0} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    exit
}

# Get the response header.
set statusCode [CkRest_ReadResponseHeader $rest]
if {$statusCode < 0} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    exit
}

puts "response status code = $statusCode"

set outputFile "c:/temp/qa_output/hamlet.xml"

set fac [new_CkFileAccess]

set success [CkFileAccess_OpenForWrite $fac $outputFile]
if {$statusCode < 0} then {
    puts [CkFileAccess_lastErrorText $fac]
    delete_CkRest $rest
    delete_CkFileAccess $fac
    exit
}

# 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.)
set bd [new_CkBinData]

set status 1
while {$status == 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.
    set status [CkRest_ReadRespChunkBd $rest 16000 $bd]
    if {$status >= 0} then {
        puts "Received chunk: [CkBinData_get_NumBytes $bd] bytes"
        CkFileAccess_FileWriteBd $fac $bd 0 0
        CkBinData_Clear $bd
    }

}

CkFileAccess_FileClose $fac

puts "Success."

delete_CkRest $rest
delete_CkFileAccess $fac
delete_CkBinData $bd