如何从HTTP标头获取文件大小

时间:2020-03-06 14:37:04  来源:igfitidea点击:

下载前,我想获取http:/.../文件的大小。该文件可以是网页,图像或者媒体文件。可以使用HTTP标头完成此操作吗?如何仅下载文件HTTP标头?

解决方案

Can this be done with HTTP headers?

是的,这是要走的路。如果提供了信息,则该信息位于" Content-Length"的标题中。但是请注意,不一定是这种情况。

可以仅使用" HEAD"请求而不是" GET"来下载标头。也许以下代码会有所帮助:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/");
req.Method = "HEAD";
long len;
using(HttpWebResponse resp = (HttpWebResponse)(req.GetResponse()))
{
    len = resp.ContentLength;
}

注意HttpWebResponse对象上内容长度的属性-无需手动解析Content-Length标头。

是的,假设我们正在与之通信的HTTP服务器支持/允许这样做:

System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://stackoverflow.com/robots.txt");
req.Method = "HEAD";
using (System.Net.WebResponse resp = req.GetResponse())
{
    int ContentLength;
    if(int.TryParse(resp.Headers.Get("Content-Length"), out ContentLength))
    { 
        //Do something useful with ContentLength here 
    }
}

如果不允许使用HEAD方法,或者服务器答复中不存在Content-Length标头,则确定服务器上内容大小的唯一方法是下载内容。由于这不是特别可靠,因此大多数服务器将包含此信息。