Создание Delphi-программы для отслеживания перенаправлений URL, записи полного QueryString и отслеживания установленных cookie с помощью Indy компонентов
При получении маркетинговых писем с URL-ссылками, которые перенаправляются с сайта на сайт, может возникнуть желание отслеживать каждый URL-переход, записывать полный QueryString и отслеживать установленные cookie в процессе. В этой статье мы рассмотрим, как это можно сделать с помощью компонентов Indy в Delphi.
Шаг 1: Подготовка
Сначала нам нужен HTTP-клиент, в нашем случае это TIdHTTP из Indy. Также нам понадобится структура данных для хранения результатов:
type
TRedirection = record
queryString: String;
cookies: TStringList;
end;
TRedirectionArray = array of TRedirection;
Шаг 2: Создание класса для отслеживания перенаправлений
Создадим класс TRedirectionTester, который будет выполнять основную работу. Этот класс необходим, так как функции-обработчики событий определены как procedure of object.
type
TRedirectionTester = class
private
FRedirData: TRedirectionArray;
procedure redirectEvent(Sender: TObject; var dest: string;
var NumRedirect: Integer; var Handled: boolean; var VMethod: TIdHTTPMethod);
procedure newCookie(ASender: TObject; ACookie: TIdCookie; var VAccept: Boolean);
public
function traverseURL(url: String): TRedirectionArray;
property RedirData: TRedirectionArray read FRedirData;
end;
Шаг 3: Обработка перенаправлений
Реализуем обработчик события OnRedirect, который будет добавлять запись в массив при каждом перенаправлении.
procedure TRedirectionTester.redirectEvent(Sender: TObject; var dest: string;
var NumRedirect: Integer; var Handled: boolean; var VMethod: TIdHTTPMethod);
var
redirDataLength: Integer;
begin
Handled := True;
redirDataLength := Length(FRedirData);
SetLength(FRedirData, redirDataLength + 1);
FRedirData[redirDataLength].queryString := dest;
FRedirData[redirDataLength].cookies := TStringList.Create;
end;
Шаг 4: Обработка установленных cookie
Реализуем обработчик события OnNewCookie, который будет добавлять установленные cookie в массив.
procedure TRedirectionTester.newCookie(ASender: TObject; ACookie: TIdCookie; var VAccept: Boolean);
var
redirDataLength: Integer;
begin
VAccept := True;
redirDataLength := High(FRedirData);
if (Assigned(FRedirData[redirDataLength].cookies)) then
FRedirData[redirDataLength].cookies.Add(ACookie.CookieText);
end;
Шаг 5: Реализация основной функции
Реализуем функцию traverseURL, которая будет отправлять запросы и возвращать массив с результатами.
function TRedirectionTester.traverseURL(url: String): TRedirectionArray;
var
traverser: TIdHTTP;
begin
traverser := TIdHTTP.Create();
traverser.HandleRedirects := True;
traverser.OnRedirect := redirectEvent;
traverser.CookieManager := TIdCookieManager.Create();
traverser.CookieManager.OnNewCookie := newCookie;
SetLength(FRedirData, 1);
FRedirData[0].queryString := url;
FRedirData[0].cookies := TStringList.Create;
traverser.Get(url);
Result := FRedirData;
end;
Пример использования
Чтобы использовать класс TRedirectionTester в своей форме, создайте экземпляр класса и вызовите функцию traverseURL при нажатии кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var
tester: TRedirectionTester;
redirData: TRedirectionArray;
begin
tester := TRedirectionTester.Create;
redirData := tester.traverseURL('http://example.com');
// Обработайте массив redirData с результатами перенаправлений
tester.Free;
end;
Этот пример отслеживает перенаправления, записывает полный QueryString и отслеживает установленные cookie для заданного URL. Обратите внимание, что данное решение работает только с перенаправлениями на уровне HTTP (коды состояния 301 и 302). Для отслеживания перенаправлений, выполненных с помощью тегов <meta> или JavaScript, потребуется дополнительная обработка результатов запроса.
В инструкции описано создание Delphi-программы для отслеживания перенаправлений URL, записи полного QueryString и отслеживания установленных cookie с помощью Indy компонентов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.