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) Send SOAP multipart/related with XML Body and Zip AttachmentDemonstrates how to construct and send a multipart/related POST containing a SOAP XML body and a binary zip attachment.
load ./chilkat.dll # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. # This example constructs and sends the following HTTP request. # (The boundary strings will be different and auto-generated by Chilkat) # Accept-Encoding: gzip,deflate # SOAPAction: invio # Content-Type: Multipart/Related; boundary="MIME_boundary"; type="text/xml"; start="mailto:rootpart@soapui.org" # MIME-Version: 1.0 # # --MIME_boundary # Content-Type: text/xml; charset=UTF-8 # Content-Transfer-Encoding: 8bit # Content-ID: <rootpart@soapui.org> # # <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:attachment.ws.it"> # <soapenv:Header/> # <soapenv:Body> # <urn:inputBean> # <nomeFileAllegato>myfile.zip</nomeFileAllegato> # </urn:inputBean> # </soapenv:Body> # </soapenv:Envelope> # # --MIME_boundary # Content-Type: application/zip # Content-Transfer-Encoding: binary # Content-ID: <myfile.zip> # Content-Disposition: attachment; name="myfile.zip"; filename="myfile.zip" # # ... binary zip data goes here ... # --MIME_boundary-- # set rest [new_CkRest] CkRest_AddHeader $rest "Accept-Encoding" "gzip,deflate" CkRest_AddHeader $rest "SOAPAction" "invio" CkRest_AddHeader $rest "Content-Type" "Multipart/Related; boundary=\"MIME_boundary\"; type=\"text/xml\"; start=\"mailto:rootpart@soapui.org\"" CkRest_AddHeader $rest "MIME-Version" "1.0" # Build the SOAP XML: # Use this online tool to generate the code from sample XML: # Generate Code to Create XML set xml [new_CkXml] CkXml_put_Tag $xml "soapenv:Envelope" CkXml_AddAttribute $xml "xmlns:soapenv" "http://schemas.xmlsoap.org/soap/envelope/" CkXml_AddAttribute $xml "xmlns:urn" "urn:attachment.ws.it" CkXml_UpdateChildContent $xml "soapenv:Header" "" CkXml_UpdateChildContent $xml "soapenv:Body|urn:inputBean|nomeFileAllegato" "myfile.zip" # Build the SOAP XML sub-part CkRest_put_PartSelector $rest "1" CkRest_AddHeader $rest "Content-Type" "text/xml; charset=UTF-8" CkRest_AddHeader $rest "Content-Transfer-Encoding" "8bit" CkRest_AddHeader $rest "Content-ID" "<rootpart@soapui.org>" set success [CkRest_SetMultipartBodyString $rest [CkXml_getXml $xml]] # Build the sub-part containing the .zip CkRest_put_PartSelector $rest "2" CkRest_AddHeader $rest "Content-Type" "application/zip" CkRest_AddHeader $rest "Content-Transfer-Encoding" "binary" CkRest_AddHeader $rest "Content-ID" "<myfile.zip>" CkRest_AddHeader $rest "Content-Disposition" "attachment; name=\"myfile.zip\"; filename=\"myfile.zip\"" # Add a zip file to the 2nd sub-part body. # This example will load the .zip file into memory, but it is also possible to stream directly from the file as the request is sent # by calling SetMultipartBodyStream. set bd [new_CkBinData] set success [CkBinData_LoadFile $bd "qa_data/zips/helloWorld.zip"] set success [CkRest_SetMultipartBodyBd $rest $bd] # To be safe, always revert the PartSelector back to 0.. CkRest_put_PartSelector $rest "0" # Send the request by connecting to the web server and then sending.. # Connect using TLS. set bAutoReconnect 1 set success [CkRest_Connect $rest "www.chilkatsoft.com" 443 1 $bAutoReconnect] if {$success != 1} then { puts [CkRest_lastErrorText $rest] delete_CkRest $rest delete_CkXml $xml delete_CkBinData $bd exit } # In this example, we're setting DebugMode. # When debug mode is turned on, no request is actually sent. # Instead, the request that would be sent is recorded to memory # and we can retrieve it afterwards.. CkRest_put_DebugMode $rest 1 set responseStr [CkRest_fullRequestMultipart $rest "POST" "/someTargetPath"] if {[CkRest_get_LastMethodSuccess $rest] != 1} then { puts [CkRest_lastErrorText $rest] delete_CkRest $rest delete_CkXml $xml delete_CkBinData $bd exit } # Retrieve the request that would've been sent and save it to a file. # We can then examine the file to see if the request was structured as we desired. # (Note: The zip bytes will be binary data and will appear as garbled garbage in a text editor..) set bdRequest [new_CkBinData] CkRest_GetLastDebugRequest $rest $bdRequest set success [CkBinData_WriteFile $bdRequest "qa_output/multipartRelatedRequest.bin"] puts "OK, examine the output file.." delete_CkRest $rest delete_CkXml $xml delete_CkBinData $bd delete_CkBinData $bdRequest |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.