Delphi 以编程方式从filehoster下载文件
我在filehoster上传了一些文件,我想使用Delphi以编程方式下载这些文件。他们不需要任何验证码或类似的东西,通常你只需按下一个按钮就可以得到文件。让我们坐飞机吧 现在我想我可以简单地获取“立即下载”按钮指向的URL,使用一个TIdHTTP.Get请求,并将其保存为MemoryStream/Filestream/where。复制链接地址会导致,当输入到我的浏览器时,会弹出下载提示Delphi 以编程方式从filehoster下载文件,delphi,redirect,download,idhttp,Delphi,Redirect,Download,Idhttp,我在filehoster上传了一些文件,我想使用Delphi以编程方式下载这些文件。他们不需要任何验证码或类似的东西,通常你只需按下一个按钮就可以得到文件。让我们坐飞机吧 现在我想我可以简单地获取“立即下载”按钮指向的URL,使用一个TIdHTTP.Get请求,并将其保存为MemoryStream/Filestream/where。复制链接地址会导致,当输入到我的浏览器时,会弹出下载提示 var MemStream: TMemoryStream; code: string;
var
MemStream: TMemoryStream;
code: string; // added for solution
number: integer; // added for solution
begin
with TIdHTTP.Create(nil) do
try
HandleRedirects := true;
System.Delete(code,1,AnsiPos('var n =',code)+7); // added
number := StrToInt(AnsiLeftStr(code,AnsiPos(' ',code)-1)) + 1; // added
MemStream := TMemoryStream.Create;
try
// Get('http://www56.zippyshare.com/d/5862319/604061/bgAvgTable.png', MemStream);
Get(TIdURI.URLEncode('http://www56.zippyshare.com/d/5862319/' + IntToStr(number)
+ '/bgAvgTable.png'), MemStream); // added for solution
MemStream.SaveToFile('test.png');
finally
MemStream.Free;
end;
finally
Free;
end;
end;
然而,使用一个检查工具,我发现它包含一个302重定向到原始站点,因此在执行GET请求时,我必须设置HandlerRedirects以避免错误消息,并且我得到的是原始站点的HTML代码,而不是我怀疑的文件
所以,我有点搞不懂怎么做
1)尽管URL仅包含指向上一页的302重定向,但我还是以某种方式从浏览器中获取了该文件
2)我可以在代码中实现同样的功能。你们中有人能在那里教我一点吗?;)
编辑
由于您的输入,我可以找到问题所在,我必须使用的地址是使用一个随机数生成的,可以在原始源代码中找到。因此,先发布一个获取号码的请求就可以做到这一点。我已经相应地编辑了代码。服务器可能正在检查一些跟踪,以避免以编程方式下载文件 它可能是主机主想要检查的任何东西,从各种可能性来看,但最典型的检查是推荐人 在web浏览器中使用链接从一个页面导航到另一个页面时,浏览器会将第一个页面作为引用添加到请求标头中的第二个页面 Indy支持您添加推荐人:
IdHTTP1.Request.Referer := 'http://www.any.other.page';
如果检查失败,服务器脚本只会将输入重定向到donwload页面。这样做是为了显示广告或实现文件托管服务的其他目标。文件托管网站会采取不同的技巧,以确保您没有广告,并向您展示广告,也许还会反击。可能有
- 浅析请求中的HTTP referer字段
- 设置和检查会话唯一cookie
- 具有隐藏一次性值的HTTP表单和下载按钮将不是链接,而是表单的提交操作
- 生成一次性哈希URL,并将IP和浏览器名称等不同参数编码到其中
- 也许更多
您没有显示HTTP流量日志,因此很难确定。显然,您试图下载png文件,但将其另存为bmp文件。@jachguate抱歉,输入错误,但通过将其另存为.html,我确保它是上一页的实际代码听起来似乎合理,但是,在get请求之前添加这一行并没有改变之前的地址anything@Heina因此,主机正在检查不同的内容。这取决于你去弄清楚它是什么,所以当成功下载发生时,分析你的浏览器和服务器之间的流量。你确定下载发生在get而不是post中吗?他可以在浏览器中禁用HTTP Referer,看看这是否会改变行为。URL是一次性的,但没有人知道其中散列了什么。只需启动两个不同的浏览器,并将链接从一个浏览器传递到另一个浏览器-相同的行为。因此,实际上HTTP日志中可能有任何内容,我们没有看到哪种格式适合我/这里更熟练的人解释的有意义的流量日志?pastebin上的一些文本,最好您禁用浏览器和插件上的图片,以减少不相关的请求-可能会有很多。首先使用delphi获取页面并显示其流量。然后分析line,但linem阅读HTTP上的帮助,并尝试匹配上面的项目符号。但是-也许你可以完全搞定,在Delphi中运行web浏览器,让它为你加载文件?运行时丑陋且缓慢,但编码速度更快。我完全可以尝试第二种方法,但是如果我不能以其他方式让它工作,这似乎是最后的手段。我并不想知道如何最有效地共享它,但是如何真正创建它,比如,你说的是什么类型的日志?Wireshark会话,Fiddler,还有什么?编辑:多亏了你的输入,我找到了一个解决方案,因为它可能会埋在这里。我编辑了开场白。接受你的答案,因为你提供了最多的意见,但也要感谢JachGrate。