Sample code for 30+ languages & platforms
Delphi ActiveX

Simple SOAP Request

See more HTTP Examples

Demonstrates how to send a simple SOAP request.

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
xml: TChilkatXml;
soapRequestBody: WideString;
endpoint: WideString;
soapAction: WideString;
contentType: WideString;
http: TChilkatHttp;
resp: TChilkatHttpResponse;
responseXml: TChilkatXml;
statusCode: Integer;
dat_NumberToDollarsResult: WideString;

begin
success := 0;

// --------------------------------------------------------------------------------
// Also see Chilkat's Online WSDL Code Generator
// to generate code and SOAP Request and Response XML for each operation in a WSDL.
// --------------------------------------------------------------------------------

// Create the following XML to be sent in the SOAP request body.

// <soapenv:Envelope xmlns:dat="http://www.dataaccess.com/webservicesserver/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
//     <soapenv:Header/>
//     <soapenv:Body>
//         <dat:NumberToDollars>
//             <dat:dNum>99.0</dat:dNum>
//         </dat:NumberToDollars>
//     </soapenv:Body>
// </soapenv:Envelope>

xml := TChilkatXml.Create(Self);
xml.Tag := 'soapenv:Envelope';
xml.AddAttribute('xmlns:dat','http://www.dataaccess.com/webservicesserver/');
xml.AddAttribute('xmlns:soapenv','http://schemas.xmlsoap.org/soap/envelope/');
xml.UpdateChildContent('soapenv:Header','');
xml.UpdateChildContent('soapenv:Body|dat:NumberToDollars|dat:dNum','99.0');

// In a SOAP HTTP request, including the XML declaration (<?xml version="1.0" encoding="UTF-8"?>) in the XML body is generally not required. 
xml.EmitXmlDecl := 0;
soapRequestBody := xml.GetXml();

endpoint := 'https://www.dataaccess.com/webservicesserver/numberconversion.wso';
soapAction := '';
//  For SOAP requests, the standard Content-Type is usually set to "text/xml" or "application/soap+xml"
contentType := 'text/xml';

http := TChilkatHttp.Create(Self);

http.ClearHeaders();
http.SetRequestHeader('SOAPAction',soapAction);

resp := TChilkatHttpResponse.Create(Self);
success := http.HttpStr('POST',endpoint,soapRequestBody,'utf-8',contentType,resp.ControlInterface);
if (success = 0) then
  begin
    Memo1.Lines.Add(http.LastErrorText);
    Exit;
  end;

// Get the XML response body.
responseXml := TChilkatXml.Create(Self);
resp.GetBodyXml(responseXml.ControlInterface);

statusCode := resp.StatusCode;
Memo1.Lines.Add('response status code: ' + IntToStr(statusCode));

// If the status code does not indicate succcess, then show the response XML,
// which probably contains error information.
if (statusCode <> 200) then
  begin
    Memo1.Lines.Add(responseXml.GetXml());
    Exit;
  end;

Memo1.Lines.Add(responseXml.GetXml());

// Parse the successful SOAP response XML.

// This is a sample of the response XML, but the namespace prefixes will be different.
// We can parse the result using "*" for the namespace prefixes (see below).

// <soapenv:Envelope xmlns:dat="http://www.dataaccess.com/webservicesserver/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
//     <soapenv:Header/>
//     <soapenv:Body>
//         <dat:NumberToDollarsResponse>
//             <dat:NumberToDollarsResult>string</dat:NumberToDollarsResult>
//         </dat:NumberToDollarsResponse>
//     </soapenv:Body>
// </soapenv:Envelope>

dat_NumberToDollarsResult := responseXml.GetChildContent('*:Body|*:NumberToDollarsResponse|*:NumberToDollarsResult');
Memo1.Lines.Add('result: ' + dat_NumberToDollarsResult);
end;