Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Parse Multipart Binary Http ResponseThis example demonstrates how to parse an HTTP response that is multipart and contains a binary file, such as a .zip or .pdf.
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Handle hoHttp Variant vReq Handle hoReq Variant vResp Handle hoResp Variant vRespBody Handle hoRespBody Handle hoMime Integer iNumParts Variant vPart0 Handle hoPart0 String sXmlStr Variant vPart1 Handle hoPart1 Variant vZipData Handle hoZipData String sTemp1 Boolean bTemp1 // 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 pvComObject of hoReq to vReq Get ComSynchronousRequest Of hoHttp "www.somedomain.com" 443 True vReq To vResp If (IsComObject(vResp)) Begin Get Create (RefClass(cComChilkatHttpResponse)) To hoResp Set pvComObject Of hoResp To vResp End Get ComLastMethodSuccess Of hoHttp To bTemp1 If (bTemp1 <> True) 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 Send Destroy of hoResp // 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 <> True) 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 ComGetPart Of hoMime 0 To vPart0 If (IsComObject(vPart0)) Begin Get Create (RefClass(cComChilkatMime)) To hoPart0 Set pvComObject Of hoPart0 To vPart0 End // Should be OK because we checked NumParts above.. Get ComGetBodyDecoded Of hoPart0 To sXmlStr Showln sXmlStr Showln "----" Send Destroy of hoPart0 // Save the 2nd part to a file. (It is a .zip file in our test case..) Get ComGetPart Of hoMime 1 To vPart1 If (IsComObject(vPart1)) Begin Get Create (RefClass(cComChilkatMime)) To hoPart1 Set pvComObject Of hoPart1 To vPart1 End 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 Send Destroy of hoPart1 Showln "OK." End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.