有一个固定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方法了。
01 | static void main( string [] args) |
02 | { |
03 | var url = "http://www.google.com/intl/en_all/images/srpr/logo1w.png" ; |
04 | var len = gethttplength(url); |
05 | console.writeline( "url:{0}
length:{1}" , url,len); |
06 | } |
07 |
08 | static long gethttplength( string url) |
09 | { |
10 | var length = 0l; |
11 | try |
12 | { |
13 | var req = (httpwebrequest)webrequest.createdefault( new uri(url)); |
14 | req.method = "head" ; |
15 | req.timeout = 5000; |
16 | var res = (httpwebresponse)req.getresponse(); |
17 | if (res.statuscode == httpstatuscode.ok) |
18 | { |
19 | length = res.contentlength; |
20 | } |
21 |
22 | res.close(); |
23 | return length; |
24 | } |
25 | catch (webexception wex) |
26 | { |
27 | return 0; |
28 | } |
29 | } |
执行后输出如下:
url:http://www.google.com/intl/en_all/images/srpr/logo1w.png length:6803
注意:head方法和get方法一样,有时候服务端设置了缓存的话会返回同样的内容回来。这时候可以在url后面增加一个时间参数使缓存失效实现实时获取.
httpwebrequest.method 属性
中文:http://msdn.microsoft.com/zh-cn/library/90k2e0f0(v=vs.90).aspx
英文:http://msdn.microsoft.com/en-us/library/90k2e0f0(v=vs.90).aspx
http协议中head部分
http://www.w3.org/protocols/rfc2616/rfc2616-sec9.html
若要转载麻瓜君的文章
记得请署名噢...
投稿邮箱:
526783352@qq.com
长按二维码“识别”关注
更多内容请登录:
bbs.hmseojs.com
关注公众号,免费刷快排。
奇点seo » C# 使用Httpwebrequest方法获取文件长度