gpt4 book ai didi

Delphi:使用 URL 转发下载文件

转载 作者:行者123 更新时间:2023-12-02 03:45:55 25 4
gpt4 key购买 nike

我有一个免费域名,可将 URL 转发(伪装)到另一个网站。

如果我输入 http://my.com/1.zip在浏览器的网址中,它会转到 http://his.com/1.zip并下载文件。

如何使用 Indy TIdHTTP (Delphi XE2) 执行相同操作。浏览器和我一开始收到 404 错误,但后来他们以某种方式下载了除我之外的文件。

我需要使用第一个链接,但实际上是从另一个站点下载的。例如。第一个站点有一个 xxx.zip 文件。我想去http://my.com/xxx.zip但实际上是从http://his.com/xxx.zip下载(文件存储的位置)。

谢谢!

编辑:

我将 HandleRedirects 设置为 true,分配了一个 CookieManager (我已经看过这个问题 Indy - IdHttp how to handle page redirects? )。

尝试下载http://liga-updates.ua.tc/GDI+.zip在你的德尔福中

最佳答案

相关网站返回 HTTP 404响应包含 <iframe> 的 HTML 页面加载真实的 URL。一个404回复将导致TIdHTTP筹集EIdHTTPProtocolException默认情况下异常(exception)。回复内容(HTML)可以通过 EIdHTTPProtocolException.ErrorMessage 访问属性。

例如:

procedure TForm1.Button1Click(Sender: TObject); 
var
Http: TIdHttp;
URL, Filename: string;
FS: TFileStream;
...
begin
Filename := 'C:\path\GDI+.zip';
URL := 'http://liga-updates.ua.tc/GDI+.zip';

FS := TFileStream.Create(Filename, fmCreate);
try
try
Http := TIdHttp.Create(nil);
try
try
Http.Get(URL, FS);
except
on E: EIdHTTPProtocolException do begin
if E.ErrorCode <> 404 then raise;
URL := ParseIFrameURLFromHTML(E.ErrorMessage);
if URL = '' then raise;
Http.Get(URL, FS);
end;
end;
finally
Http.Free;
end;
finally
FS.Free;
end;
except
DeleteFile(Filename);
ShowMessage('Unable to download file.');
Exit;
end;
ShowMessage('Downloaded OK');
end;

关于Delphi:使用 URL 转发下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8867958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com