当HEAD请求未报告ContentLength时,如何获得下载大小?

时间:2013-08-22 14:24:25

标签: delphi size

在Delphi中使用此代码获取网页大小:(我的意思是页面源大小)

uses
  IdHTTP

function URLsize(const URL : string) : integer;
var
  Http: TIdHTTP;
begin
  Http := TIdHTTP.Create(nil);
  try
    Http.Head(URL);    
    result := round(Http.Response.ContentLength / 1048576);   //MB   
  finally
    Http.Free;
  end;
end;

我可以轻松获取某些网址,例如http://sample.com/test.exe。它以MB为单位返回大小。

但是,对于像http://stackoverflow.com/这样的网址,我无法使用此代码获取网址大小。它返回0-1

在这种情况下如何获得尺寸?

2 个答案:

答案 0 :(得分:8)

并非所有HTTP HEAD响应都包含content-length。所以,一般来说,你想做的事情是不可能的。如果您遇到不包含内容长度的响应,则需要下载内容以查找长度。

答案 1 :(得分:3)

即使Web服务器确实返回了正确的内容长度,您也要将其除以1048576以获取兆字节值。由于http://stackoverflow.com/远小于一兆字节,因此返回0。我仍然难以置信-1来自哪里 - 因为http://stackoverflow.com/为我返回194569,没有分开。你从其他网站得到了-1吗?您的结果是Http.Response.ContentLength的分割值或原始值吗?