Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Delphi DLL) Manually Follow HTTP RedirectsDemonstrates how to manually follow redirects for an HTTP GET.
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 http: HCkHttp; resp: HCkHttpResponse; status: Integer; loopCount: Integer; nextUrl: PWideChar; begin // 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 := CkHttp_QuickGetObj(http,'http://yandex.ru/'); if (CkHttp_getLastMethodSuccess(http) = 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 // IMPORTANT: This example requires Chilkat v9.5.0.49 or greater because // the FinalRedirectUrl in prior versions is only set when redirects // are automatically followed. Starting in v9.5.0.49, the FinalRedirectUrl is // set to the next redirect URL when a 301/302 response is received, regardless // of the value of the FollowRedirects property. Memo1.Lines.Add('Redirect URL: ' + CkHttp__finalRedirectUrl(http)); CkHttpResponse_Dispose(resp); nextUrl := CkHttp__finalRedirectUrl(http); resp := CkHttp_QuickGetObj(http,nextUrl); if (CkHttp_getLastMethodSuccess(http) = 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 CkHttpResponse_Dispose(resp); Memo1.Lines.Add('Too many redirects.'); Exit; end; CkHttpResponse_Dispose(resp); end; CkHttp_Dispose(http); end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.