Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Simple SOAP Request
See more HTTP Examples
Demonstrates how to send a simple SOAP request.Chilkat Pascal (Lazarus/Delphi) Downloads
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.HttpResponse,
Chilkat.Xml;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
xml: TXml;
soapRequestBody: string;
endpoint: string;
soapAction: string;
contentType: string;
http: THttp;
resp: THttpResponse;
responseXml: TXml;
statusCode: Integer;
dat_NumberToDollarsResult: string;
begin
success := False;
// --------------------------------------------------------------------------------
// 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 := TXml.Create;
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 := False;
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 := THttp.Create;
http.ClearHeaders();
http.SetRequestHeader('SOAPAction',soapAction);
resp := THttpResponse.Create;
success := http.HttpStr('POST',endpoint,soapRequestBody,'utf-8',contentType,resp);
if (success = False) then
begin
WriteLn(http.LastErrorText);
Exit;
end;
// Get the XML response body.
responseXml := TXml.Create;
resp.GetBodyXml(responseXml);
statusCode := resp.StatusCode;
WriteLn('response status code: ' + statusCode);
// If the status code does not indicate succcess, then show the response XML,
// which probably contains error information.
if (statusCode <> 200) then
begin
WriteLn(responseXml.GetXml());
Exit;
end;
WriteLn(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');
WriteLn('result: ' + dat_NumberToDollarsResult);
xml.Free;
http.Free;
resp.Free;
responseXml.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.