似乎http://liga-updates.ua.tc是基于 404 错误重定向到自定义页面(由网络服务器内部使用)。
尝试对head
那里的任何资源执行 http:它将返回 404 和 HTML 响应。该响应包含一个与实际下载文件相关的iframe
元素。src
基于此,我写了一个小代码。
我之所以使用THttpCli
,是因为 TIdHttp 似乎不会返回状态为 404 的“有效”响应(无论如何不在我的 D5 版本中)。
uses HttpProt;
procedure TForm1.Button1Click(Sender: TObject);
const
IFRAME_SRC = '<iframe src="';
var
HttpCli: THttpCli;
S, URL, FileName: string;
I: Integer;
FS: TFileStream;
begin
URL := 'http://liga-updates.ua.tc/GDI+.zip';
HttpCli := THttpCli.Create(nil);
try
HttpCli.URL := URL;
HttpCli.MultiThreaded := True;
try
HttpCli.Get;
except
// this will always be 404 for this domain (test from outside the IDE)
end;
S := HttpCli.LastResponse; // THttpCli returns valid response when status 404
// extract IFRAME src
I := Pos(IFRAME_SRC, S);
if I <> 0 then
begin
Delete(S, 1, I + Length(IFRAME_SRC) - 1);
URL := Copy(S, 1, Pos('"', S) - 1);
HttpCli.URL := URL;
FileName := ExtractFileName(StringReplace(URL, '/', '\', [rfReplaceAll]));
FS := TFileStream.Create(FileName, fmCreate);
try
HttpCli.RcvdStream := FS;
try
HttpCli.Get;
ShowMessage('Downaloded OK');
except
ShowMessage('Unable to download file.');
end;
finally
FS.Free;
end;
end
else
ShowMessage('Unable to extract download information.');
finally
HttpCli.Free;
end;
end;