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
(PureBasic) 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.
IncludeFile "CkHttpResponse.pb" IncludeFile "CkHttp.pb" IncludeFile "CkBinData.pb" IncludeFile "CkMime.pb" IncludeFile "CkHttpRequest.pb" Procedure ChilkatExample() ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. success.i http.i = CkHttp::ckCreate() If http.i = 0 Debug "Failed to create object." ProcedureReturn EndIf req.i = CkHttpRequest::ckCreate() If req.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; ... ; 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. resp.i = CkHttp::ckSynchronousRequest(http,"www.somedomain.com",443,1,req) If CkHttp::ckLastMethodSuccess(http) <> 1 Debug CkHttp::ckLastErrorText(http) CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) ProcedureReturn EndIf ; Get the response body (which is expected to be binary) respBody.i = CkBinData::ckCreate() If respBody.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkHttpResponse::ckGetBodyBd(resp,respBody) CkHttpResponse::ckDispose(resp) ; 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. mime.i = CkMime::ckCreate() If mime.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkMime::ckLoadMimeBd(mime,respBody) If success <> 1 Debug CkMime::ckLastErrorText(mime) CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) CkBinData::ckDispose(respBody) CkMime::ckDispose(mime) ProcedureReturn EndIf numParts.i = CkMime::ckNumParts(mime) If numParts < 2 Debug "Expected multipart MIME with at least 2 sub-parts." CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) CkBinData::ckDispose(respBody) CkMime::ckDispose(mime) ProcedureReturn EndIf ; Get the 1st sub-part, which is the XML. part0.i = CkMime::ckGetPart(mime,0) ; Should be OK because we checked NumParts above.. xmlStr.s = CkMime::ckGetBodyDecoded(part0) Debug xmlStr Debug "----" CkMime::ckDispose(part0) ; Save the 2nd part to a file. (It is a .zip file in our test case..) part1.i = CkMime::ckGetPart(mime,1) success = CkMime::ckSaveBody(part1,"qa_output/attachedZip.zip") ; Alternatively, we could extract the binary data to a BinData and use elsewhere.. zipData.i = CkBinData::ckCreate() If zipData.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkMime::ckGetBodyBd(part1,zipData) success = CkBinData::ckWriteFile(zipData,"qa_output/attachedZip_again.zip") CkMime::ckDispose(part1) Debug "OK." CkHttp::ckDispose(http) CkHttpRequest::ckDispose(req) CkBinData::ckDispose(respBody) CkMime::ckDispose(mime) CkBinData::ckDispose(zipData) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.