Sample code for 30+ languages & platforms
Lazarus Pascal

REST through HTTP Proxy

See more REST Examples

Demonstrates how to connect through an HTTP proxy to make REST API calls.

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.AuthAws,
  Chilkat.Rest,
  Chilkat.Xml,
  Chilkat.Socket;

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

procedure RunDemo;
var
  success: Boolean;
  rest: TRest;
  socket: TSocket;
  bTls: Boolean;
  port: Integer;
  maxWaitMs: Integer;
  authAws: TAuthAws;
  responseXml: string;
  xml: TXml;

begin
  success := False;

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

  //  This example connects to a REST server through an HTTP proxy.
  //  It will connect to the Amazon AWS service for this example.
  rest := TRest.Create;
  socket := TSocket.Create;

  //  Set the HTTP proxy domain or IP address, and port.
  socket.HttpProxyHostname := '192.168.1.100';
  socket.HttpProxyPort := 8088;

  //  We want to tell the socket object that we're doing HTTP over the proxy connection.
  //  This is because an HTTP proxy used for other protocols (IMAP, SMTP, SSH, FTP, etc.) 
  //  can require some internal differences in behavior (i.e. how we do things).
  socket.HttpProxyForHttp := True;

  //  Other properties exist for specifying a proxy login, password, and authentication method (such as NTLM),
  //  but these are not used in this example.

  //  Connect through the HTTP proxy to the Amazon AWS server for the S3 service.
  bTls := True;
  port := 443;
  maxWaitMs := 5000;
  success := socket.Connect('s3.amazonaws.com',port,bTls,maxWaitMs);
  if (success <> True) then
    begin
      WriteLn('Connect Failure Error Code: ' + socket.ConnectFailReason);
      WriteLn(socket.LastErrorText);
      Exit;
    end;

  //  Use the proxied TLS connection:
  success := rest.UseConnection(socket,True);
  if (success <> True) then
    begin
      WriteLn(rest.LastErrorText);
      Exit;
    end;

  //  Provide AWS credentials for the REST call.
  authAws := TAuthAws.Create;
  authAws.AccessKey := 'AWS_ACCESS_KEY';
  authAws.SecretKey := 'AWS_SECRET_KEY';
  authAws.ServiceName := 's3';
  success := rest.SetAuthAws(authAws);

  //  List all buckets for the account...
  responseXml := rest.FullRequestNoBody('GET','/');
  if (rest.LastMethodSuccess <> True) then
    begin
      WriteLn(rest.LastErrorText);
      Exit;
    end;

  xml := TXml.Create;
  success := xml.LoadXml(responseXml);

  //  Show the full XML returned.
  WriteLn(xml.GetXml());

  //  Iterate over the buckets, showing each bucket name.
  success := xml.FindChild2('Buckets');
  if (xml.FirstChild2() = True) then
    begin
      WriteLn(xml.GetChildContent('Name'));
      while (xml.NextSibling2() = True) do
        begin
          WriteLn(xml.GetChildContent('Name'));
        end;

    end;
  //  Move the internal pointer back to the root node.
  xml.GetRoot2();


  rest.Free;
  socket.Free;
  authAws.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.