从 url 获取正确的下载文件大小

ac-*_*lap 3 .net c# http download uwp

我试图从 url ( https://windows.php.net/downloads/releases/php-7.2.9-nts-Win32-VC15-x64.zip )获取文件大小,这是我的代码 -

HttpWebRequest request = HttpWebRequest.CreateHttp(url);
HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync());
long length = response.ContentLength;
Run Code Online (Sandbox Code Playgroud)

但价值length就是598 bytes,而网站(从浏览器下载时)报告的大小24.5MB。我什至尝试"Content-Length"从响应头访问,但它也具有相同的值598.

我错过了什么吗?有没有其他方法可以更准确地获取文件大小?

Sub*_*bbu 5

我使用了您的示例 URL 并通过以下方式阅读了内容:

var dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream);
var responseFromServer = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

20/feb/2018:嗨!我们似乎收到来自空用户代理的大量请求。虽然这应该不是问题,但不幸的是,这会导致此服务器上的带宽问题导致所有下载都不可用。因此,我们决定暂时阻止空用户代理,直到我们升级服务器带宽。

03/mar/2018:我们升级了服务器带宽。然而,这仍然不足以处理所有空的用户代理连接。请相应地更新脚本中的用户代理或联系我们,以便我们进行讨论。

感谢您的理解。

它说的是 set UserAgent。因此,我将用户代理设置如下:

var request = HttpWebRequest.CreateHttp(url);
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1";
var response = (HttpWebResponse)(await request.GetResponseAsync());
var length = response.ContentLength;
Run Code Online (Sandbox Code Playgroud)

现在,我得到了正确的Content-Length25691309

我刚刚从以下位置选择了一个用户代理字符串:http : //www.useragentstring.com/index.php?id=19879

如果您只对远程文件的大小感兴趣,则应考虑链接问题的答案。它本质上使用不同的 HTTP 方法(HEAD 与 GET)

        var request = HttpWebRequest.CreateHttp(url);
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1";
        request.Method = "HEAD";
        using (var response = await request.GetResponseAsync())
        {
            var length = response.ContentLength;
        }
Run Code Online (Sandbox Code Playgroud)

您可以在相关问题中找到有关 HEAD Vs GET 的更多详细信息: http HEAD vs GET performance