我在filehoster上传了一些文件,我想用Delphi以编程方式下载。它们不需要任何验证码等,通常只需按一个按钮即可获得该文件。我们来看this as an example。
现在我想我可以简单地将URL下载到现在 - 按钮指向,使用TIdHTTP.Get请求并使用MemoryStream / Filestream /保存它。复制链接地址会导致this site,当进入我的浏览器时弹出下载提示。
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请求时,我必须设置HandleRedirects以避免错误消息,我得到原始站点的HTML代码而不是我怀疑的文件。
所以,我对如何感到困惑 1)我以某种方式从我的浏览器中获取该文件,尽管该URL仅包含302重定向到上一页并且 2)我可以在我的代码中实现相同的目标。你们中的某个人可能会在那里教育我一点儿吗? ;)
修改
感谢您的输入我可以找到问题,结果是我必须使用的地址是使用随机数生成的,可以在原始源中找到。因此,发布获取号码的请求可以解决问题。我已经相应地编辑了代码。谢谢你们!
答案 0 :(得分:2)
文件托管网站提供不同的技巧,以确保您不是hotlinking,并向您展示广告,也许还有反击。可以
像USDownloader和JDownloader这样的工具做了很多尝试来绕过它。
虽然zippyshare似乎更自由,但它仍然无法承受热链接,并且应该至少实施一些自卫措施。 分析流量时 - 从绝对新鲜的浏览器开始,首次加载zippyshare页面,并检查一切。
当我重新加载页面几次时,我看到数字“604061”不同,链接在每次重新加载后一次又一次地改变。您可能必须加载页面,解析链接,设置HTTP引用程序,然后才下载文件。
您不会显示HTTP流量日志,因此很难确定。
答案 1 :(得分:1)
服务器可能正在检查某些跟踪以避免以编程方式下载文件。
这可能是主持人想要检查的任何内容,但是最常见的检查是推荐人。
当您使用链接在Web浏览器中从一个页面导航到另一个页面时,浏览器会将第一个页面作为引荐者添加到请求标题中的第二个页面。
Indy支持您添加推荐人:
IdHTTP1.Request.Referer := 'http://www.any.other.page';
如果检查失败,服务器脚本只会将输入重定向到donwload页面。这样做是为了展示广告或填补文件托管服务的其他目标。