我想在下载之前获取http:/.../文件的大小.该文件可以是网页,图像或媒体文件.可以使用HTTP标头完成吗?如何仅下载文件HTTP标头?
是的,假设你正在谈论的HTTP服务器支持/允许:
public long GetFileSize(string url) { long result = -1; System.Net.WebRequest req = System.Net.WebRequest.Create(url); req.Method = "HEAD"; using (System.Net.WebResponse resp = req.GetResponse()) { if (long.TryParse(resp.Headers.Get("Content-Length"), out long ContentLength)) { result = ContentLength; } } return result; }
如果不允许使用HEAD方法,或者服务器回复中不存在Content-Length标头,则确定服务器上内容大小的唯一方法是下载它.由于这不是特别可靠,大多数服务器都会包含此信息.
可以使用HTTP标头完成吗?
是的,这是要走的路.如果提供了信息,它就在标题中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
手动解析标头.