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

WebDAV PROPFIND

See more HTTP Examples

Demonstrates how to send a WebDAV PROPFIND HTTP request.

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.HttpResponse;

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

procedure RunDemo;
var
  success: Boolean;
  req: THttpRequest;
  http: THttp;
  xmlBody: string;
  resp: THttpResponse;
  responseXml: string;
  statusCode: Integer;

begin
  success := False;

  //  This example assumes the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

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

  //  The PROPFIND request to be sent will look similar to this:
  //  This is from RFC 4918 at http://tools.ietf.org/html/rfc4918#section-9.1.3

  //       PROPFIND /file HTTP/1.1
  //       Host: www.example.com
  //       Content-type: application/xml; charset="utf-8";
  //       Content-Length: xxxx
  //  
  //       <?xml version="1.0" encoding="utf-8" ?>
  //       <D:propfind xmlns:D="DAV:">
  //         <D:prop xmlns:R="http://ns.example.com/boxschema/">
  //           <R:bigbox/>
  //           <R:author/>
  //           <R:DingALing/>
  //           <R:Random/>
  //         </D:prop>
  //       </D:propfind>

  //  Build the HTTP request object. 

  //  The HTTP verb should be "PROPFIND";
  req.HttpVerb := 'PROPFIND';

  //  The Content-Type should be "application/xml", and
  //  the charset attribute in the Content-Type header should
  //  be utf-8:
  req.ContentType := 'application/xml';
  req.Charset := 'utf-8';
  req.SendCharset := True;

  //  Load the request body with the XML.  Your application 
  //  is free to construct the XML using any means desired.
  //  Once the XML is prepared, load it into the request body
  //  like this:
  xmlBody := 'This is the string that should contain the XML body...';
  success := req.LoadBodyFromString(xmlBody,'utf-8');
  if (success = False) then
    begin
      WriteLn(req.LastErrorText);
      Exit;
    end;

  //  For this example, pretend the WEBDAV endpoint is:
  //  https://webdav.chilkatstorage.com/

  //  Note: There is no actual "chilkatstorage.com" site.  
  //  This is only an example...

  //  The "path" part of this endpoint URL is simply "/".

  //  Send the request to the WebDAV endpoint using 
  //  the HttpSReq method:

  resp := THttpResponse.Create;
  success := http.HttpSReq('webdav.chilkatstorage.com',443,True,req,resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  Get the XML response:

  responseXml := resp.BodyStr;
  WriteLn('XML Response: ' + responseXml);

  //  Get the response status code, such as 207

  statusCode := resp.StatusCode;
  WriteLn('StatusCode = ' + statusCode);


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