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
(DataFlex) How to Access Parts of a multipart/related HTTP ResponseDemonstrates how to access the parts of a multipart/related response. This example sends a ficticious multipart/related request, and handles a ficticious multipart/related response. We send the following multipart/related request: Content-Type: multipart/related; start-info="text/xml"; type="application/xop+xml"; boundary="----=_Part_0_1744155.1118953559416" Content-Length: 3453 SOAPAction: "some-SOAP-action" ------=_Part_1_4558657.1118953559446 Content-Type: application/xop+xml; type="text/xml"; charset=utf-8 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Detail xmlns="http://example.org/mtom/data"> <image> <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org" /> </image> </Detail> </soap:Body> </soap:Envelope> ------=_Part_1_4558657.1118953559446 Content-Type: image/jpeg Content-ID: <5aeaa450-17f0-4484-b845-a8480c363444@example.org> ... binary data ...
Use ChilkatAx-win32.pkg Procedure Test Handle hoHttp Handle hoSoapXml Boolean iSuccess String sXmlBody Variant vReq Handle hoReq Boolean iUseTls Variant vResp Handle hoResp Handle hoMime Variant vPart0 Handle hoPart0 String sSubPartXmlBody String sTemp1 Integer iTemp1 Boolean bTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatHttp)) To hoHttp If (Not(IsComObjectCreated(hoHttp))) Begin Send CreateComObject of hoHttp End Get Create (RefClass(cComChilkatXml)) To hoSoapXml If (Not(IsComObjectCreated(hoSoapXml))) Begin Send CreateComObject of hoSoapXml End // Build the following SOAP XML // <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> // <soap:Body> // <Detail xmlns="http://example.org/mtom/data"> // <image> // <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org" /> // </image> // </Detail> // </soap:Body> // </soap:Envelope> Set ComTag Of hoSoapXml To "soap:Envelope" Get ComAddAttribute Of hoSoapXml "xmlns:soap" "http://schemas.xmlsoap.org/soap/envelope/" To iSuccess Get ComUpdateAttrAt Of hoSoapXml "soap:Body|Detail" True "xmlns" "http://example.org/mtom/data" To iSuccess Get ComUpdateAttrAt Of hoSoapXml "soap:Body|Detail|image|xop:Include" True "xmlns:xop" "http://www.w3.org/2004/08/xop/include" To iSuccess Get ComUpdateAttrAt Of hoSoapXml "soap:Body|Detail|image|xop:Include" True "href" "cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org" To iSuccess Set ComEmitXmlDecl Of hoSoapXml To False Get ComGetXml Of hoSoapXml To sXmlBody Showln sXmlBody Get Create (RefClass(cComChilkatHttpRequest)) To hoReq If (Not(IsComObjectCreated(hoReq))) Begin Send CreateComObject of hoReq End Set ComHttpVerb Of hoReq To "POST" Set ComPath Of hoReq To "/something/someTarget" Set ComContentType Of hoReq To 'multipart/related; start-info="text/xml"; type="application/xop+xml"' Send ComAddHeader To hoReq "SOAPAction" "some-SOAP-action" Get ComAddStringForUpload2 Of hoReq "" "" sXmlBody "utf-8" 'application/xop+xml; type="text/xml"; charset=utf-8' To iSuccess // The bytes will be sent as binary (not base64 encoded). Get ComAddFileForUpload2 Of hoReq "" "qa_data/jpg/starfish.jpg" "image/jpeg" To iSuccess // The JPEG data is the 2nd sub-part, and therefore is at index 1 (the first sub-part is at index 0) Get ComAddSubHeader Of hoReq 1 "Content-ID" "<5aeaa450-17f0-4484-b845-a8480c363444@example.org>" To iSuccess Set ComFollowRedirects Of hoHttp To True Move True To iUseTls Get pvComObject of hoReq to vReq Get ComSynchronousRequest Of hoHttp "www.example.org" 443 iUseTls vReq To vResp If (IsComObject(vResp)) Begin Get Create (RefClass(cComChilkatHttpResponse)) To hoResp Set pvComObject Of hoResp To vResp End Get ComLastMethodSuccess Of hoHttp To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoHttp To sTemp1 Showln sTemp1 Procedure_Return End // Imagine the HTTP response is multipart related and is something like this: // HTTP/1.1 200 OK // Cache-Control: no-cache, no-store // Pragma: no-cache // Transfer-Encoding: chunked // Content-Type: multipart/related; boundary=------------080001080500020607080905 // Expires: -1 // Server: Microsoft-IIS/10.0 // X-AspNet-Version: 4.0.30319 // X-Powered-By: ASP.NET // Date: Wed, 19 Feb 2020 15:27:06 GMT // // --------------080001080500020607080905 // Content-Type: application/xop+xml; charset=iso-8859-1 // Content-Id: RootPart // Content-Transfer-Encoding: binary // // <?xml version="1.0" encoding="iso-8859-1"?> // <soapenv:Envelope xmlns:xcpt="..."> // <soapenv:Header /> // <soapenv:Body> // <xres:Transport profile="http://something.example.com/..." version="1.4"> // <xres:TransportHeader> // ... // ... // </xres:TransportHeader> // <xres:TransportBody /> // </xres:Transport> // </soapenv:Body> // </soapenv:Envelope> // --------------080001080500020607080905-- // To get the XML, load the full MIME of the response into a Chilkat MIME object. Then get the body of the 1st sub-part. Get Create (RefClass(cComChilkatMime)) To hoMime If (Not(IsComObjectCreated(hoMime))) Begin Send CreateComObject of hoMime End Get ComFullMime Of hoResp To sTemp1 Get ComLoadMime Of hoMime sTemp1 To iSuccess // Your code might verify that the Content-Type is indeed multipart/related. Get ComContentType Of hoMime To sTemp1 Showln sTemp1 Get ComNumParts Of hoMime To iTemp1 Showln "num parts = " iTemp1 // Assuming it is, and the number of sub-parts is > 0 Get ComNumParts Of hoMime To iTemp1 If (iTemp1 > 0) Begin Get ComGetPart Of hoMime 0 To vPart0 If (IsComObject(vPart0)) Begin Get Create (RefClass(cComChilkatMime)) To hoPart0 Set pvComObject Of hoPart0 To vPart0 End // The Content-Type (in this ficticious example) should be "application/xop+xml" Get ComContentType Of hoPart0 To sTemp1 Showln "sub-part Content-Type: " sTemp1 // Now get the XML Get ComGetBodyDecoded Of hoPart0 To sSubPartXmlBody Showln sSubPartXmlBody Send Destroy of hoPart0 End Send Destroy of hoResp End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.