DataFlex
DataFlex
Send SOAP multipart/related with XML Body and Zip Attachment
See more REST Misc Examples
Demonstrates how to construct and send a multipart/related POST containing a SOAP XML body and a binary zip attachment.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoRest
Handle hoXml
Variant vBd
Handle hoBd
Boolean iBAutoReconnect
String sResponseStr
Variant vBdRequest
Handle hoBdRequest
String sTemp1
Boolean bTemp1
Move False To iSuccess
// 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--
//
Get Create (RefClass(cComChilkatRest)) To hoRest
If (Not(IsComObjectCreated(hoRest))) Begin
Send CreateComObject of hoRest
End
Get ComAddHeader Of hoRest "Accept-Encoding" "gzip,deflate" To iSuccess
Get ComAddHeader Of hoRest "SOAPAction" "invio" To iSuccess
Get ComAddHeader Of hoRest "Content-Type" 'Multipart/Related; boundary="MIME_boundary"; type="text/xml"; start="mailto:rootpart@soapui.org"' To iSuccess
Get ComAddHeader Of hoRest "MIME-Version" "1.0" To iSuccess
// Build the SOAP XML:
// Use this online tool to generate the code from sample XML:
// Generate Code to Create XML
Get Create (RefClass(cComChilkatXml)) To hoXml
If (Not(IsComObjectCreated(hoXml))) Begin
Send CreateComObject of hoXml
End
Set ComTag Of hoXml To "soapenv:Envelope"
Get ComAddAttribute Of hoXml "xmlns:soapenv" "http://schemas.xmlsoap.org/soap/envelope/" To iSuccess
Get ComAddAttribute Of hoXml "xmlns:urn" "urn:attachment.ws.it" To iSuccess
Send ComUpdateChildContent To hoXml "soapenv:Header" ""
Send ComUpdateChildContent To hoXml "soapenv:Body|urn:inputBean|nomeFileAllegato" "myfile.zip"
// Build the SOAP XML sub-part
Set ComPartSelector Of hoRest To "1"
Get ComAddHeader Of hoRest "Content-Type" "text/xml; charset=UTF-8" To iSuccess
Get ComAddHeader Of hoRest "Content-Transfer-Encoding" "8bit" To iSuccess
Get ComAddHeader Of hoRest "Content-ID" "<rootpart@soapui.org>" To iSuccess
Get ComGetXml Of hoXml To sTemp1
Get ComSetMultipartBodyString Of hoRest sTemp1 To iSuccess
// Build the sub-part containing the .zip
Set ComPartSelector Of hoRest To "2"
Get ComAddHeader Of hoRest "Content-Type" "application/zip" To iSuccess
Get ComAddHeader Of hoRest "Content-Transfer-Encoding" "binary" To iSuccess
Get ComAddHeader Of hoRest "Content-ID" "<myfile.zip>" To iSuccess
Get ComAddHeader Of hoRest "Content-Disposition" 'attachment; name="myfile.zip"; filename="myfile.zip"' To iSuccess
// 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.
Get Create (RefClass(cComChilkatBinData)) To hoBd
If (Not(IsComObjectCreated(hoBd))) Begin
Send CreateComObject of hoBd
End
Get ComLoadFile Of hoBd "qa_data/zips/helloWorld.zip" To iSuccess
Get pvComObject of hoBd to vBd
Get ComSetMultipartBodyBd Of hoRest vBd To iSuccess
// To be safe, always revert the PartSelector back to 0..
Set ComPartSelector Of hoRest To "0"
// Send the request by connecting to the web server and then sending..
// Connect using TLS.
Move True To iBAutoReconnect
Get ComConnect Of hoRest "www.chilkatsoft.com" 443 True iBAutoReconnect To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// 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..
Set ComDebugMode Of hoRest To True
Get ComFullRequestMultipart Of hoRest "POST" "/someTargetPath" To sResponseStr
Get ComLastMethodSuccess Of hoRest To bTemp1
If (bTemp1 <> True) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// 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..)
Get Create (RefClass(cComChilkatBinData)) To hoBdRequest
If (Not(IsComObjectCreated(hoBdRequest))) Begin
Send CreateComObject of hoBdRequest
End
Get pvComObject of hoBdRequest to vBdRequest
Get ComGetLastDebugRequest Of hoRest vBdRequest To iSuccess
Get ComWriteFile Of hoBdRequest "qa_output/multipartRelatedRequest.bin" To iSuccess
Showln "OK, examine the output file.."
End_Procedure