Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получение финального URL после переадресаций с WinHTTP в Delphi

Delphi , Интернет и Сети , URL

В процессе работы с веб-ресурсами иногда возникает необходимость получить финальный URL после прохождения всех переадресаций. В данной статье мы рассмотрим, как это можно сделать, используя WinHTTP в Delphi.

Подтвержденный ответ:

Использование WinHTTP в Delphi для получения финального URL после переадресаций может показаться сложной задачей, но на самом деле это не так. Существует несколько способов решить эту проблему, и мы рассмотрим два из них: с использованием WinHTTP и Indy.

Способ 1: WinHTTP

При использовании WinHTTP для получения финального URL после переадресаций можно воспользоваться функцией WinHttpSetStatusCallback, которая позволяет получать уведомления о каждом redirects, происходящем во время запроса. Вот пример кода, демонстрирующий, как это можно сделать на Object Pascal (Delphi):

function GetFinalURL(const AMainURL: string): string;
var
  http: Variant;
  status: LongInt;
  flags: LongInt;
begin
  Result := '';
  http := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  try
    http.Option(6) := False; // Disable redirects
    http.open('GET', AMainURL, false);
    http.setStatusCallback(WinHttpSetStatusCallback(@WinHttpStatusCallback, WINHTTP_CALLBACK_FLAG_REDIRECT), 0);
    http.send;
    repeat
      status := http.Status;
      flags := 0;
      if (status = WINHTTP_STATUS_REDIRECTION) then
        flags := WINHTTP_CALLBACK_FLAG_REDIRECT;
      WinHttpSetStatusCallback(http, @WinHttpStatusCallback, flags, 0);
    until (status <> WINHTTP_STATUS_REDIRECTION);
    if (status = WINHTTP_STATUS_OK) then
      Result := http.getResponseHeader('Location')
    else
      Result := AMainURL;
  finally
    http.Free;
  end;
end;

function WinHttpStatusCallback(hRequest: LongInt; dwInternetStatus: LongInt; dwInfo: LongInt; dwContext: LongInt; dwStatus: LongInt): LongInt; stdcall;
begin
  Result := 0;
  case dwInternetStatus of
    WINHTTP_CALLBACK_STATUS_REDIRECTION:
      begin
        // Process redirection here
      end;
    // Process other statuses here
  end;
end;

Способ 2: Indy

Если вы все же решили использовать Indy для получения финального URL после переадресаций, можно воспользоваться свойством TIdHTTP.Request.URL. Вот пример кода, демонстрирующий, как это можно сделать на Object Pascal (Delphi):

function GetFinalURL(const AMainURL: string): string;
var
  idHTTP: TIdHTTP;
begin
  Result := '';
  idHTTP := TIdHTTP.Create(nil);
  try
    idHTTP.HandleRedirects := True;
    try
      idHTTP.Get(AMainURL);
      Result := idHTTP.Request.URL;
    except
    end;
  finally
    idHTTP.Free;
  end;
end;

Альтернативный ответ:

В комментариях к вопросу было предложено использовать другие библиотеки, такие как Indy или ICS, вместо WinHTTP. Однако, как показано выше, WinHTTP также может быть использован для получения финального URL после переадресаций, хотя и с некоторой дополнительной настройкой.

Заключение:

В данной статье мы рассмотрели, как получить финальный URL после переадресаций с WinHTTP в Delphi. Мы рассмотрели два способа решения этой задачи: с использованием WinHTTP и Indy. Оба способа имеют свои преимущества и недостатки, и выбор между ними зависит от конкретных требований вашего проекта.

Создано по материалам из источника по ссылке.

Статья о получении финального URL после переадресаций с помощью WinHTTP в Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: URL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 22:47:04/0.0034401416778564/0