Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Another SOAP with MTOM XOP Attachment Example

See more HTTP Examples

Demonstrates another multipart/related MTOM SOAP request that adds additional headers in each MIME sub-part, and also specifies Content-Transfer-Encoding in the sub-parts.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.HttpRequest,
  Chilkat.Xml,
  Chilkat.HttpResponse;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  req: THttpRequest;
  xmlBody: string;
  xmlBody2: string;
  useTls: Boolean;
  resp: THttpResponse;
  xmlResponse: TXml;

begin
  success := False;

  //  This example sends a request such as the following:

  //  POST /FseInsServicesWeb/services/fseComunicazioneMetadati HTTP/1.1
  //  Connection: Keep-Alive
  //  Content-Length: 50649
  //  Content-Type: multipart/related; type="application/xop+xml"; start="<rootpart@soapui.org>"; start-info="text/xml"; boundary="----=_Part_0_355796458.1662133302632"
  //  Accept-Encoding: gzip,deflate
  //  Authorization: Basic xxxxx
  //  Host: ...
  //  SOAPAction: "http://comunicazionemetadati.wsdl.fse.ini.finanze.it/ComunicazioneMetadati"
  //  MIME-Version: 1.0
  //  
  //  ------=_Part_0_355796458.1662133302632
  //  Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
  //  Content-Transfer-Encoding: 8bit
  //  Content-ID: <rootpart@soapui.org>
  //  
  //  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://comunicazionemetadatirichiesta.xsd.fse.ini.finanze.it" xmlns:tip="http://tipodaticomunicazionemetadati.xsd.fse.ini.finanze.it">
  //  <soapenv:Header/>
  //  ...
  //  
  //  ------=_Part_0_355796458.1662133302632
  //  Content-Type: text/xml; charset=Cp1252
  //  Content-Transfer-Encoding: quoted-printable
  //  Content-ID: <CDA2LAB_190_signed.xml>
  //  Content-Disposition: attachment; name="CDA2LAB_190_signed.xml"
  //  
  //  <!-- INSERIRE IL RIFERIMENTO AL FOGLIO DI STILE DI AGID OPPURE INSERIRNE UN=
  //  ...
  //  
  //  ------=_Part_0_355796458.1662133302632--

  http := THttp.Create;
  req := THttpRequest.Create;

  req.HttpVerb := 'POST';
  req.Path := '/FseInsServicesWeb/services/fseComunicazioneMetadati';

  //  Chilkat will automatically generate and add a boundary string.
  req.ContentType := 'multipart/related; type="application/xop+xml"; start="<rootpart@soapui.org>"; start-info="text/xml"';
  req.AddHeader('SOAPAction','some-SOAP-action');

  req.AddHeader('Connection','Keep-Alive');
  req.AddHeader('Accept-Encoding','gzip,deflate');
  req.AddHeader('MIME-Version','1.0');

  //  Chilkat will automatically add the Content-Length and Host headers.

  //  The "Authorization: Basic ..."  header is added by setting the Login and Password and specifying Basic authentication:
  http.Login := '...';
  http.Password := '...';
  http.BasicAuth := True;

  //  Add the 1st multipart/related sub-part, which is the SOAP envelope.
  xmlBody := '<soapenv:Envelope ....';
  success := req.AddStringForUpload2('','',xmlBody,'utf-8','application/xop+xml; type="text/xml"; charset=utf-8');

  //  Additional headers for the 1st sub-part
  success := req.AddSubHeader(0,'Content-ID','<rootpart@soapui.org>');
  success := req.AddSubHeader(0,'Content-Transfer-Encoding','8bit');
  success := req.AddSubHeader(0,'Content-Disposition','');

  //  Add the 2nd multipart/related sub-part, which is the signed XML
  xmlBody2 := '<!-- INSERIRE IL RIFERIMENT ....';
  success := req.AddStringForUpload2('CDA2LAB_190_signed.xml','',xmlBody2,'Cp1252','text/xml; charset=Cp1252');

  //  Additional headers for the 2nd sub-part.
  success := req.AddSubHeader(1,'Content-ID','<CDA2LAB_190_signed.xml>');
  success := req.AddSubHeader(1,'Content-Transfer-Encoding','quoted-printable');
  success := req.AddSubHeader(1,'Content-Disposition','attachment; name="CDA2LAB_190_signed.xml"');

  http.FollowRedirects := True;

  useTls := True;
  resp := THttpResponse.Create;
  success := http.HttpSReq('fseservicetest.sanita.finanze.it',443,useTls,req,resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  xmlResponse := TXml.Create;
  success := xmlResponse.LoadXml(resp.BodyStr);
  WriteLn(xmlResponse.GetXml());


  http.Free;
  req.Free;
  resp.Free;
  xmlResponse.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.