Sample code for 30+ languages & platforms
Delphi DLL

Manually Follow HTTP Redirects

See more HTTP Examples

Demonstrates how to manually follow redirects for an HTTP GET.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, HttpResponse, Http;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
http: HCkHttp;
resp: HCkHttpResponse;
status: Integer;
loopCount: Integer;
nextUrl: PWideChar;

begin
success := False;

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

http := CkHttp_Create();

// The FollowRedirects property controls whether redirects
// are automatically followed.  The default behavior is to
// automatically follow redirects.

// Explicitly set FollowRedirects so that redirects are NOT automatically taken:
CkHttp_putFollowRedirects(http,False);

resp := CkHttpResponse_Create();
success := CkHttp_HttpNoBody(http,'GET','http://yandex.ru/',resp);
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(http));
    Exit;
  end;

status := CkHttpResponse_getStatusCode(resp);
Memo1.Lines.Add('HTTP Response Status: ' + IntToStr(status));

// The FinalRedirectUrl property will contain the redirect URL
// If FollowRedirects was equal to True, then all of the 
// intermediate redirects (if any) would be followed until
// there were no more redirects.  However, because 
// FollowRedirects is not True, FinalRedirectUrl contains
// the next redirect URL.

loopCount := 0;

while (status = 302) do
  begin

    Memo1.Lines.Add('Redirect URL: ' + CkHttp__finalRedirectUrl(http));

    nextUrl := CkHttp__finalRedirectUrl(http);
    success := CkHttp_HttpNoBody(http,'GET',nextUrl,resp);
    if (success = False) then
      begin
        Memo1.Lines.Add(CkHttp__lastErrorText(http));
        Exit;
      end;

    status := CkHttpResponse_getStatusCode(resp);
    Memo1.Lines.Add('HTTP Response Status: ' + IntToStr(status));

    // For safety, prevent infinite loops by
    // keeping a loopCount and only allows following a max 
    // of 10 redirects:
    loopCount := loopCount + 1;
    if (loopCount > 10) then
      begin
        Memo1.Lines.Add('Too many redirects.');
        Exit;
      end;

  end;

CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);

end;