手机
当前位置:查字典教程网 >编程开发 >C#教程 >使用Http Head方法获取文件长度的实现方法详解
使用Http Head方法获取文件长度的实现方法详解
摘要:需求有一个固定URL的文件,服务器端程序会定期的更新这个文件,现在需要写一个工具来监控这个文件的变化。解决办法最初我想到的是把这个文件下载下...

需求

有一个固定URL的文件,服务器端程序会定期的更新这个文件,现在需要写一个工具来监控这个文件的变化。

解决办法

最初我想到的是把这个文件下载下来,然后通过大小来判断文件是否改变(已知该文件变化时大小会变化)。

但是这个文件有时会很大,如果每次都下载下来会消耗一定的时间,希望能更快一些。

搜索了一下,发现Http除了Get和Post方法外,还有Head方法,它可以获取http头信息,其中的Content-Length就是文件的大小。

理论

在HttpWebRequest 中设置Method属性为Head,就可以只获取http的头信息,而不返回实际内容。

除了Get,Post,Head外,Method属性还可以设置:

复制代码 代码如下:

Method 属性设置为任何 HTTP 1.1 协议谓词:GET、HEAD、POST、PUT、DELETE、TRACE 或 OPTIONS。

在Http协议中,Head方法得到的响应和Get方法相比,除了没有正文内容以外,其它都是一样的。也就是说:

Get:http头信息+内容

Head:http头信息

这样如果我们只关心http头,而不需要内容时,就可以使用Head方法了。

实践

复制代码 代码如下:

static void Main(string[] args)

{

var url = "http://www.google.com/intl/en_ALL/images/srpr/logo1w.png";

var len = GetHttpLength(url);

Console.WriteLine("Url:{0}rnLength:{1}", url,len);

}

static long GetHttpLength(string url)

{

var length = 0l;

try

{

var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));

req.Method = "HEAD";

req.Timeout = 5000;

var res = (HttpWebResponse)req.GetResponse();

if (res.StatusCode == HttpStatusCode.OK)

{

length = res.ContentLength;

}

res.Close();

return length;

}

catch (WebException wex)

{

return 0;

}

}

执行后输出如下:

Url:http://www.google.com/intl/en_ALL/images/srpr/logo1w.png

Length:6803

注意:Head方法和Get方法一样,有时候服务端设置了缓存的话会返回同样的内容回来。这时候可以在url后面增加一个时间参数使缓存失效实现实时获取.

【使用Http Head方法获取文件长度的实现方法详解】相关文章:

C# Linq读取XML文件的实例

WinForm子窗体访问父窗体控件的实现方法

c#使用linq技术创建xml文件的小例子

c# 获取数据库中所有表名称的方法

解析C#中@符号的几种使用方法详解

使用 C# 动态编译代码和执行的代码

解决C#获取鼠标相对当前窗口坐标的实现方法

C#对XML文件的各种操作实现方法

C#获取计算机名,IP,MAC信息实现代码

c#生成缩略图的实现方法

精品推荐
分类导航