Visual FoxPro
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
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