Sample code for 30+ languages & platforms
Visual FoxPro

Parse Multipart Binary Http Response

See more HTTP Examples

This example demonstrates how to parse an HTTP response that is multipart and contains a binary file, such as a .zip or .pdf.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL loReq
LOCAL loResp
LOCAL loRespBody
LOCAL loMime
LOCAL lnNumParts
LOCAL loPart0
LOCAL lcXmlStr
LOCAL loPart1
LOCAL loZipData

lnSuccess = 0

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

loHttp = CreateObject('Chilkat.Http')
loReq = CreateObject('Chilkat.HttpRequest')

* ...
* Insert code here to construct some kind of HTTP request.
* this example is to show how to parse a particular kind of response.
* ...
* ...

* Send the request (whatever it may be in your case) to get the HTTP response object.
loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpSReq("www.somedomain.com",443,1,loReq,loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loReq
    RELEASE loResp
    CANCEL
ENDIF

* Get the response body (which is expected to be binary)
loRespBody = CreateObject('Chilkat.BinData')
loResp.GetBodyBd(loRespBody)

* For this example, the response body contains something like this:

* ------=_Part_21302_2029949381.1547401515443
* Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
* Content-Transfer-Encoding: 8bit
* Content-ID: <rootpart@ws.jboss.org>
* 
* <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'><env:Header></env:Header><env:Body>...</env:Body></env:Envelope>
* ------=_Part_21302_2029949381.1547401515443
* Content-Type: application/octet-stream
* Content-Transfer-Encoding: binary
* Content-Id: <fileArchivio-7d302908-4d64-43d3-bf4e-79ce806d43b3@ws.jboss.org>
* 
* BINARY_CONTENT_HERE...
* 
* ------=_Part_21302_2029949381.1547401515443--
* 

* Load it into a Chilkat MIME object.
loMime = CreateObject('Chilkat.Mime')
lnSuccess = loMime.LoadMimeBd(loRespBody)
IF (lnSuccess = 0) THEN
    ? loMime.LastErrorText
    RELEASE loHttp
    RELEASE loReq
    RELEASE loResp
    RELEASE loRespBody
    RELEASE loMime
    CANCEL
ENDIF

lnNumParts = loMime.NumParts
IF (lnNumParts < 2) THEN
    ? "Expected multipart MIME with at least 2 sub-parts."
    RELEASE loHttp
    RELEASE loReq
    RELEASE loResp
    RELEASE loRespBody
    RELEASE loMime
    CANCEL
ENDIF

* Get the 1st sub-part, which is the XML.

loPart0 = CreateObject('Chilkat.Mime')
loMime.PartAt(0,loPart0)

* Should be OK because we checked NumParts above..
lcXmlStr = loPart0.GetBodyDecoded()
? lcXmlStr
? "----"

* Save the 2nd part to a file.  (It is a .zip file in our test case..)

loPart1 = CreateObject('Chilkat.Mime')
loMime.PartAt(1,loPart1)

lnSuccess = loPart1.SaveBody("qa_output/attachedZip.zip")

* Alternatively, we could extract the binary data to a BinData and use elsewhere..
loZipData = CreateObject('Chilkat.BinData')
lnSuccess = loPart1.GetBodyBd(loZipData)
lnSuccess = loZipData.WriteFile("qa_output/attachedZip_again.zip")

? "OK."

RELEASE loHttp
RELEASE loReq
RELEASE loResp
RELEASE loRespBody
RELEASE loMime
RELEASE loPart0
RELEASE loPart1
RELEASE loZipData