0
我有一個網址,將帶我到一個不同的URL地址。這很可能是通過URL重定向。我需要採取初始網址並確定「最終結果」頁面的網址的方式。我環顧四周,推薦Indy組件TIdHTTP。這是最好的(也叫做最簡單/最簡單)的方法嗎?由於我對這種類型的編碼幾乎沒有經驗,如果任何人有示例代碼分享,它將不勝感激。Delphi - 如何識別URL重定向的最終結果地址?
作爲一個例子,這裏是我有一個出發網址...
感謝
我有一個網址,將帶我到一個不同的URL地址。這很可能是通過URL重定向。我需要採取初始網址並確定「最終結果」頁面的網址的方式。我環顧四周,推薦Indy組件TIdHTTP。這是最好的(也叫做最簡單/最簡單)的方法嗎?由於我對這種類型的編碼幾乎沒有經驗,如果任何人有示例代碼分享,它將不勝感激。Delphi - 如何識別URL重定向的最終結果地址?
作爲一個例子,這裏是我有一個出發網址...
感謝
我建議執行一個簡單的GET請求並處理OnRedirect事件保存最後一個被重定向到的地址。如果需要,您還可以保存中間地址。
我寫了一個小類來處理這個問題,在您的項目範圍內,您可能會將這些方法添加到需要結果的類中,而不是封裝它。
TRedirectTester = class
private
Address: string;
procedure RedirectProc(Sender: TObject; var dest: string;
var NumRedirect: Integer; var Handled: boolean; var VMethod: TIdHTTPMethod);
public
function RedirectionResult(InitialURL: string): string;
end;
我定義了一個公共職能重定向和私有程序後返回最終URL分配給OnRedirect事件(因此簽名)和存儲重定向目的地的變量。
關於實施,請記住將HandleRedirects
設置爲true
以啓用重定向,必須分配IOHandler
以便能夠處理HTTPS。每次發生重定向時,將調用分配給OnRedirect
事件的方法,因此我們可以保存目標。
procedure TRedirectTester.RedirectProc(Sender: TObject; var dest: string;
var NumRedirect: Integer; var Handled: boolean; var VMethod: TIdHTTPMethod);
begin
Address := dest;
end;
function TRedirectTester.RedirectionResult(InitialURL: string): string;
var IdHttp: TIdHTTP;
begin
Address := InitialURL;
IdHttp := TIdHTTP.Create(nil);
try
with IdHttp do
begin
HandleRedirects := true;
OnRedirect := RedirectProc;
IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
try
Get(InitialURL);
finally
IOHandler.Free;
end;
end;
finally
IdHttp.Free;
end;
Result := Address;
end;
印迪可以。您必須發出HEAD或GET請求並處理[重定向狀態](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3),直到獲得[成功狀態](http:/ /www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2)。 –