[Up][Next] Reference for unit 'fpHTTPClient' (#fcl)

Advanced TFPHTTPClient Features

The TFPHTTPClient class supports advanced features like authentication, custom headers, cookies, proxy settings, and request/response event handling. These features enable building robust HTTP client applications with full control over the HTTP communication.

program AdvancedHTTPExample;

{$mode objfpc}{$H+}

uses
  SysUtils, Classes, fphttpclient, opensslsockets, base64;

procedure OnDataReceived(Sender: Objectt ContentLength, CurrentPos: Int64);
begin
  if ContentLength > 0 then
    Write(Format('Progress: %d/%d bytes (%.1f%%)' + #13,
                [CurrentPos, ContentLength, (CurrentPos/ContentLength)*100]));
end;

procedure OnPassword(Sender: ObjectRepeatRequest: Boolean);
begin
  Writeln('Authentication required - this is where you would prompt for credentials');
  RepeatRequest := False; // Don't retry automatically
end;

var
  Client: TFPHTTPClient;
  Response: String;
  AuthHeader: String;
begin
  Client := TFPHTTPClient.Create(nil);
  try
    Writeln('=== Basic Authentication Example ===');
    // HTTP Basic Authentication
    AuthHeader := 'Basic ' + EncodeBase64('username:password');
    Client.AddHeader('Authorization', AuthHeader);

    // You can also use the Username/Password properties
    // Client.UserName := 'testuser';
    // Client.Password := 'testpass';

    Writeln('=== Custom Headers Example ===');
    Client.AddHeader('X-API-Key', 'your-api-key-here');
    Client.AddHeader('X-Custom-Header', 'custom-value');
    Client.AddHeader('Accept', 'application/json');

    Writeln('=== Event Handlers Example ===');
    Client.OnDataReceived := @OnDataReceived;
    Client.OnPassword := @OnPassword;

    Writeln('=== Cookie Management Example ===');
    // Cookies are automatically managed between requests
    Client.Cookies.Values['session_id'] := 'abc123';
    Client.Cookies.Values['user_pref'] := 'dark_mode';

    Writeln('=== Redirect Configuration ===');
    Client.AllowRedirect := True;
    Client.MaxRedirects := 10;

    Writeln('=== Timeout Configuration ===');
    Client.IOTimeout := 30000; // 30 seconds timeout
    Client.ConnectTimeout := 10000; // 10 seconds connect timeout

    Writeln('=== Proxy Configuration Example ===');
    // Uncomment to use proxy
    // Client.Proxy.Host := 'proxy.example.com';
    // Client.Proxy.Port := 8080;
    // Client.Proxy.UserName := 'proxy_user';
    // Client.Proxy.Password := 'proxy_pass';

    try
      // Make request with all configured settings
      Response := Client.Get('https://httpbin.org/headers');

      Writeln('Request completed successfully!');
      Writeln('Status Code: ', Client.ResponseStatusCode);
      Writeln('Response Length: ', Length(Response));

      // Access response headers
      Writeln('Server: ', Client.GetHeader(Client.ResponseHeaders, 'Server'));
      Writeln('Content-Type: ', Client.GetHeader(Client.ResponseHeaders, 'Content-Type'));

      // Show cookies received from server
      if Client.Cookies.Count > 0 then
      begin
        Writeln('Cookies received:');
        Writeln(Client.Cookies.Text);
      end;

    except
      on E: Exception do
      begin
        Writeln('Request failed: ', E.Message);
        Writeln('Last status code: ', Client.ResponseStatusCode);
      end;
    end;

  finally
    Client.Free;
  end;
end.

Documentation generated on: Jan 27 2026