Sample code for 30+ languages & platforms
PureBasic

HTTP POST and Stream Response to File

See more REST Examples

Demonstrates how to send an HTTP POST and stream the response body directly to a file.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkRest.pb"
IncludeFile "CkStream.pb"
IncludeFile "CkUrl.pb"

Procedure ChilkatExample()

    success.i = 0

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

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    url.i = CkUrl::ckCreate()
    If url.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; This URL will emit a response that echos the query params (name and age)
    CkUrl::ckParseUrl(url,"https://www.chilkatsoft.com/readPost.asp")

    ; Connect to the web server
    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,CkUrl::ckHost(url),CkUrl::ckPort(url),CkUrl::ckSsl(url),bAutoReconnect)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkUrl::ckDispose(url)
        ProcedureReturn
    EndIf

    CkRest::ckAddQueryParam(rest,"name","John")
    CkRest::ckAddQueryParam(rest,"age","33")

    ;  Send the HTTP POST.
    success = CkRest::ckSendReqFormUrlEncoded(rest,"POST",CkUrl::ckPath(url))
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkUrl::ckDispose(url)
        ProcedureReturn
    EndIf

    ; Read the response header.
    responseStatusCode.i = CkRest::ckReadResponseHeader(rest)
    If responseStatusCode < 0
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkUrl::ckDispose(url)
        ProcedureReturn
    EndIf

    Debug "Response status code = " + Str(responseStatusCode)

    ; We expect a 200 response status if the file data is coming.
    ; Otherwise, we'll get a string response body with an error message(or no response body).
    If responseStatusCode = 200

        bodyStream.i = CkStream::ckCreate()
        If bodyStream.i = 0
            Debug "Failed to create object."
            ProcedureReturn
        EndIf

        ; The stream's sink will be a file.
        CkStream::setCkSinkFile(bodyStream, "qa_output/out.txt")

        ; Read the response body to the stream.  Given that we've
        ; set the stream's sink to a file, it will stream directly
        ; to the file.
        success = CkRest::ckReadRespBodyStream(rest,bodyStream,1)
        If success <> 1
            Debug CkRest::ckLastErrorText(rest)
            CkRest::ckDispose(rest)
            CkUrl::ckDispose(url)
            CkStream::ckDispose(bodyStream)
            ProcedureReturn
        EndIf

        Debug "Successfully streamed the response to a file."

    Else
        errResponse.s = CkRest::ckReadRespBodyString(rest)
        If CkRest::ckLastMethodSuccess(rest) <> 1
            Debug CkRest::ckLastErrorText(rest)
        Else
            Debug errResponse
        EndIf

    EndIf



    CkRest::ckDispose(rest)
    CkUrl::ckDispose(url)
    CkStream::ckDispose(bodyStream)


    ProcedureReturn
EndProcedure