DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoHttp
Variant vReq
Handle hoReq
Variant vResp
Handle hoResp
Variant vResp
Body Handle hoRespBody
Handle hoMime
Integer iNumParts
Variant vPart0
Handle hoPart0
String sXmlStr
Variant vPart1
Handle hoPart1
Variant vZipData
Handle hoZipData
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatHttp)) To hoHttp
If (Not(IsComObjectCreated(hoHttp))) Begin
Send CreateComObject of hoHttp
End
Get Create (RefClass(cComChilkatHttpRequest)) To hoReq
If (Not(IsComObjectCreated(hoReq))) Begin
Send CreateComObject of hoReq
End
// ...
// 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.
Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
If (Not(IsComObjectCreated(hoResp))) Begin
Send CreateComObject of hoResp
End
Get pvComObject of hoReq to vReq
Get pvComObject of hoResp to vResp
Get ComHttpSReq Of hoHttp "www.somedomain.com" 443 True vReq vResp To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoHttp To sTemp1
Showln sTemp1
Procedure_Return
End
// Get the response body (which is expected to be binary)
Get Create (RefClass(cComChilkatBinData)) To hoRespBody
If (Not(IsComObjectCreated(hoRespBody))) Begin
Send CreateComObject of hoRespBody
End
Get pvComObject of hoRespBody to vRespBody
Get ComGetBodyBd Of hoResp vRespBody To iSuccess
// 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.
Get Create (RefClass(cComChilkatMime)) To hoMime
If (Not(IsComObjectCreated(hoMime))) Begin
Send CreateComObject of hoMime
End
Get pvComObject of hoRespBody to vRespBody
Get ComLoadMimeBd Of hoMime vRespBody To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMime To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComNumParts Of hoMime To iNumParts
If (iNumParts < 2) Begin
Showln "Expected multipart MIME with at least 2 sub-parts."
Procedure_Return
End
// Get the 1st sub-part, which is the XML.
Get Create (RefClass(cComChilkatMime)) To hoPart0
If (Not(IsComObjectCreated(hoPart0))) Begin
Send CreateComObject of hoPart0
End
Get pvComObject of hoPart0 to vPart0
Get ComPartAt Of hoMime 0 vPart0 To iSuccess
// Should be OK because we checked NumParts above..
Get ComGetBodyDecoded Of hoPart0 To sXmlStr
Showln sXmlStr
Showln "----"
// Save the 2nd part to a file. (It is a .zip file in our test case..)
Get Create (RefClass(cComChilkatMime)) To hoPart1
If (Not(IsComObjectCreated(hoPart1))) Begin
Send CreateComObject of hoPart1
End
Get pvComObject of hoPart1 to vPart1
Get ComPartAt Of hoMime 1 vPart1 To iSuccess
Get ComSaveBody Of hoPart1 "qa_output/attachedZip.zip" To iSuccess
// Alternatively, we could extract the binary data to a BinData and use elsewhere..
Get Create (RefClass(cComChilkatBinData)) To hoZipData
If (Not(IsComObjectCreated(hoZipData))) Begin
Send CreateComObject of hoZipData
End
Get pvComObject of hoZipData to vZipData
Get ComGetBodyBd Of hoPart1 vZipData To iSuccess
Get ComWriteFile Of hoZipData "qa_output/attachedZip_again.zip" To iSuccess
Showln "OK."
End_Procedure