获取没有内容长度的远程文件大小

时间:2014-07-22 21:15:16

标签: c# winforms visual-studio-2013 httpwebrequest

所以我想到了如何使用以下代码从互联网上获取远程文件的文件大小:

WebRequest req = WebRequest.Create(url);
req.Method = "HEAD";
using (WebResponse resp = req.GetResponse())
{
    int ContentLength;
    if (int.TryParse(resp.Headers.Get("Content-Length"), out ContentLength))
    {
        // Stuff ~
    }
}

如何在没有Content-Length选项的情况下获取其大小的远程文件?

我真的没有想法,我在互联网上搜索了几个小时,无法找到它。如果有人知道,请你帮我这么好吗?

蓝宝石〜

修改
例如,此文件似乎没有内容长度? http://ag.teamdna.de/files/advancedgenetics-1.4.3-1.6.jar

解决方案

我使用GET代替HEAD,它似乎没有任何问题地工作:)!

1 个答案:

答案 0 :(得分:1)

根据standard

  

响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同。

不幸的是,有许多HTTP服务器在Content-Length标头方面无法正常运行。由于HEAD响应没有实际内容,因此它们会返回与Content-Length不同的GET

幸运的是,我们可以通过发出GET请求然后在不读取内容的情况下处理响应来获取真正的标头。一旦收到标题并且在下载所有文件之前,响应就会返回。如果您从未阅读过该内容,则无法完全下载。当您处置响应对象时,它会关闭与服务器的连接,从而终止传输。

将您的代码设为GET而不是HEAD