Sample code for 30+ languages & platforms
Lazarus Pascal

HTTP Verb - How to use any Verb (GET, PUT, POST, DELETE, PROPFIND, etc.)

The HttpVerb property may be set to anything. Typically, it is set to the common/standard HTTP verbs such as GET, POST, PUT, DELETE, etc. It can be set to anything, including custom verbs that only have meaning to your particular server-side application.

This example demonstrates how to compose an HTTP request using the PROPFIND verb, which is something one might use with a WebDAV request.

This example composes the following HTTP request:

   PROPFIND  /container/ HTTP/1.1
   Host: www.foo.bar
   Depth: 1
   Content-Type: text/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:propfind xmlns:D="DAV:">
     <D:allprop/>
   </D:propfind>

Chilkat Lazarus Pascal Downloads

Lazarus Pascal
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.Xml,
  Chilkat.HttpRequest;

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

procedure RunDemo;
var
  req: THttpRequest;
  xml: TXml;
  requestMime: string;

begin
  req := THttpRequest.Create;

  //  The ContentType, HttpVerb, and Path properties should
  //  always be explicitly set.
  req.HttpVerb := 'PROPFIND';
  req.Path := '/container/';
  req.ContentType := 'text/xml';
  req.Charset := 'utf-8';
  req.SendCharset := True;

  req.AddHeader('Depth','1');

  xml := TXml.Create;
  xml.Tag := 'propfind';
  xml.AddAttribute('xmlns:D','DAV:');
  xml.NewChild2('allprop','');

  req.LoadBodyFromString(xml.GetXml(),'utf-8');

  //  View the request that would be sent if HttpSReq was called:
  requestMime := req.GenerateRequestText();
  WriteLn(requestMime);

  //  A few important comments about the HTTP request that is generated:
  //  
  //  1) The Content-Length header is automatically generated based on the actual length of the MIME message
  //     that follows the intial (topmost) MIME header.
  //  2) The HOST header will automatically get filled in with the actual domain when HttpSReq
  //     is called.


  req.Free;
  xml.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.