B4X
B4X
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 B4X Downloads
Dim success As Boolean = False
' 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--
'
Dim rest As ChilkatRest
rest.Initialize("rest")
rest.AddHeader("Accept-Encoding", "gzip,deflate")
rest.AddHeader("SOAPAction", "invio")
rest.AddHeader("Content-Type", "Multipart/Related; boundary=" & Chr(34) & "MIME_boundary" & Chr(34) & "; type=" & Chr(34) & "text/xml" & Chr(34) & "; start=" & Chr(34) & "mailto:rootpart@soapui.org" & Chr(34))
rest.AddHeader("MIME-Version", "1.0")
' Build the SOAP XML:
' Use this online tool to generate the code from sample XML:
' Generate Code to Create XML
Dim xml As ChilkatXml
xml.Initialize
xml.Tag = "soapenv:Envelope"
xml.AddAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/")
xml.AddAttribute("xmlns:urn", "urn:attachment.ws.it")
xml.UpdateChildContent("soapenv:Header", "")
xml.UpdateChildContent("soapenv:Body|urn:inputBean|nomeFileAllegato", "myfile.zip")
' Build the SOAP XML sub-part
rest.PartSelector = "1"
rest.AddHeader("Content-Type", "text/xml; charset=UTF-8")
rest.AddHeader("Content-Transfer-Encoding", "8bit")
rest.AddHeader("Content-ID", "<rootpart@soapui.org>")
success = rest.SetMultipartBodyString(xml.GetXml)
' Build the sub-part containing the .zip
rest.PartSelector = "2"
rest.AddHeader("Content-Type", "application/zip")
rest.AddHeader("Content-Transfer-Encoding", "binary")
rest.AddHeader("Content-ID", "<myfile.zip>")
rest.AddHeader("Content-Disposition", "attachment; name=" & Chr(34) & "myfile.zip" & Chr(34) & "; filename=" & Chr(34) & "myfile.zip" & Chr(34))
' 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.
Dim bd As ChilkatBinData
bd.Initialize
success = bd.LoadFile("qa_data/zips/helloWorld.zip")
success = rest.SetMultipartBodyBd(bd)
' To be safe, always revert the PartSelector back to 0..
rest.PartSelector = "0"
' Send the request by connecting to the web server and then sending..
' Connect using TLS.
Dim bAutoReconnect As Boolean = True
success = rest.Connect("www.chilkatsoft.com", 443, True, bAutoReconnect)
If success <> True Then
Log(rest.LastErrorText)
Return
End If
' 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..
rest.DebugMode = True
Dim responseStr As String = rest.FullRequestMultipart("POST", "/someTargetPath")
If rest.LastMethodSuccess <> True Then
Log(rest.LastErrorText)
Return
End If
' 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..)
Dim bdRequest As ChilkatBinData
bdRequest.Initialize
rest.GetLastDebugRequest(bdRequest)
success = bdRequest.WriteFile("qa_output/multipartRelatedRequest.bin")
Log("OK, examine the output file..")