我有一个网址,会将我带到不同的网址。这很可能是通过URL重定向实现的。我需要一种获取初始URL并确定“最终结果”页面的URL的方法。我环顾四周,推荐使用Indy组件TIdHTTP。这是最好的(也称为最简单/最简单)的方法吗?由于我对这种类型的编码几乎没有经验,如果有人要分享示例代码,我们将不胜感激。
举个例子,这是我的起始网址......
由于
答案 0 :(得分:1)
我建议执行一个简单的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;