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
(Tcl) 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.
load ./chilkat.dll # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. set http [new_CkHttp] set req [new_CkHttpRequest] # ... # 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 is a CkHttpResponse set resp [CkHttp_SynchronousRequest $http "www.somedomain.com" 443 1 $req] if {[CkHttp_get_LastMethodSuccess $http] != 1} then { puts [CkHttp_lastErrorText $http] delete_CkHttp $http delete_CkHttpRequest $req exit } # Get the response body (which is expected to be binary) set respBody [new_CkBinData] CkHttpResponse_GetBodyBd $resp $respBody delete_CkHttpResponse $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. set mime [new_CkMime] set success [CkMime_LoadMimeBd $mime $respBody] if {$success != 1} then { puts [CkMime_lastErrorText $mime] delete_CkHttp $http delete_CkHttpRequest $req delete_CkBinData $respBody delete_CkMime $mime exit } set numParts [CkMime_get_NumParts $mime] if {$numParts < 2} then { puts "Expected multipart MIME with at least 2 sub-parts." delete_CkHttp $http delete_CkHttpRequest $req delete_CkBinData $respBody delete_CkMime $mime exit } # Get the 1st sub-part, which is the XML. # part0 is a CkMime set part0 [CkMime_GetPart $mime 0] # Should be OK because we checked NumParts above.. set xmlStr [CkMime_getBodyDecoded $part0] puts "$xmlStr" puts "----" delete_CkMime $part0 # Save the 2nd part to a file. (It is a .zip file in our test case..) # part1 is a CkMime set part1 [CkMime_GetPart $mime 1] set success [CkMime_SaveBody $part1 "qa_output/attachedZip.zip"] # Alternatively, we could extract the binary data to a BinData and use elsewhere.. set zipData [new_CkBinData] set success [CkMime_GetBodyBd $part1 $zipData] set success [CkBinData_WriteFile $zipData "qa_output/attachedZip_again.zip"] delete_CkMime $part1 puts "OK." delete_CkHttp $http delete_CkHttpRequest $req delete_CkBinData $respBody delete_CkMime $mime delete_CkBinData $zipData |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.