Sample code for 30+ languages & platforms
PureBasic

Download a Zip from a URL and OpenBd. (No .zip file is created)

See more Zip Examples

Demonstrates how to download a .zip from a URL, opens the Zip, and gets the contents of a file. No file is ever written.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkZipEntry.pb"
IncludeFile "CkZip.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

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

    ; This URL is valid and can be tested...
    success = CkHttp::ckQuickGetBd(http,"https://chilkatdownload.com/example_data/hamlet.zip",bd)
    If CkHttp::ckLastMethodSuccess(http) = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(bd)
        ProcedureReturn
    EndIf

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

    ; Open the zip from the bytes contained in bd.
    success = CkZip::ckOpenBd(zip,bd)
    If success = 0
        Debug CkZip::ckLastErrorText(zip)
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(bd)
        CkZip::ckDispose(zip)
        ProcedureReturn
    EndIf

    ; Get the entry for the file we want..
    entry.i = CkZipEntry::ckCreate()
    If entry.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkZip::ckEntryOf(zip,"hamlet.xml",entry)
    If success = 0
        Debug CkZip::ckLastErrorText(zip)
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(bd)
        CkZip::ckDispose(zip)
        CkZipEntry::ckDispose(entry)
        ProcedureReturn
    EndIf

    ; Convert all line endings to CRLF (if needed)
    lineEndingBehavior.i = 2
    xmlStr.s = CkZipEntry::ckUnzipToString(entry,lineEndingBehavior,"utf-8")
    If CkZipEntry::ckLastMethodSuccess(entry) = 0
        Debug CkZipEntry::ckLastErrorText(entry)
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(bd)
        CkZip::ckDispose(zip)
        CkZipEntry::ckDispose(entry)
        ProcedureReturn
    EndIf

    ; The XML in this case is about 274K, so let's just examine the last 20 lines...
    sb.i = CkStringBuilder::ckCreate()
    If sb.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckAppend(sb,xmlStr)

    Debug CkStringBuilder::ckLastNLines(sb,20,1)


    CkHttp::ckDispose(http)
    CkBinData::ckDispose(bd)
    CkZip::ckDispose(zip)
    CkZipEntry::ckDispose(entry)
    CkStringBuilder::ckDispose(sb)


    ProcedureReturn
EndProcedure