我正在尝试从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;
但是length
的值是598 bytes
,而网站(以及从浏览器下载时(将大小报告为24.5MB
。我什至尝试从响应标头访问"Content-Length"
,但它也有相同的值,598
.
我错过了什么吗?有没有其他方法可以更准确地获得文件大小?
我使用了您的示例 URL 并通过以下方式阅读了内容:
var dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream);
var responseFromServer = reader.ReadToEnd();
我得到的结果是:
20/Feb/2018: 嗨!我们似乎收到了来自空用户代理的大量请求。虽然这应该不是问题,但不幸的是,这导致了此服务器上的带宽问题,导致所有下载不可用。因此,我们决定暂时阻止空用户代理,直到我们升级服务器带宽。
03/Mar/2018: 我们升级了服务器带宽。但是,这仍然不足以处理所有空的用户代理连接。请相应地更新脚本中的用户代理或与我们联系,以便我们进行讨论。
感谢您的理解。
它说设置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;
现在,我得到了正确的Content-Length
值25691309
我刚刚从以下位置挑选了一个用户代理字符串: http://www.useragentstring.com/index.php?id=19879
如果您只对远程文件的大小感兴趣,则应考虑链接问题的答案。它本质上使用不同的HTTP Metho(HEAD vs 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;
}
您可以在相关问题中找到有关 HEAD 与 GET 的更多详细信息: http HEAD vs GET 性能