当前位置:  编程技术>.net/c#/asp.net

使用Http Head方法获取文件长度的实现方法详解

    来源: 互联网  发布时间:2014-10-21

    本文导语:  需求有一个固定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后面增加一个时间参数使缓存失效实现实时获取.
 

    
 
 

您可能感兴趣的文章:

  • 在div中使用css让文字底部对齐的方法
  • 弱智问题:我们怎么才知道要使用的方法需要实现什么接口才能使用这个方法呢?
  • linux下c/c++使用hash_map方法介绍
  • JAVA中不赞成使用(Deprecated)的方法是否可以使用
  • ftp协议介绍及ftp常用的上传下载等操作命令使用方法
  • c#中SAPI使用总结——SpVoice的使用方法
  • 有没有方法在 非solaris 的 unix下,比如说 sco unix 下面,使用 j2se 的方法!
  • 我初学NETTERM的使用,在哪里可以找到所有(或常用的)命令的使用方法呢?还是需要在什么书上可以找到?
  • 类的方法和实例方法,类字段和实例字段有什么不同,在使用上?
  • 用JDBC-ODBC访问ACCESS,能不能用ResultSet的deleteRow()方法?我怎么用的不行?另外,我在使用CachedRowSet类时,当调用acceptChange()方法时
  • 使用DateTime的ParseExact方法实现特殊日期时间的方法详解
  • jquery链式操作的正确使用方法
  • 关于telnet xxx.xxx.xxx.xxx:80的使用方法问题
  • jquery append()方法与html()方法的区别及使用介绍
  • 我用的是红帽5 我想知道我LINUX下的KDbg的使用方法
  • 谁能告诉我哪里能找到java包内部类及方法使用介绍
  • Javascript里的两种使用正则的方法
  • Linux 下监控某进程 内存使用峰值的方法?
  • 使用jquery prev()方法找到同级的前一个元素
  • byte() 方法如何使用?
  • :)```一个初级问题抽象类的方法我怎么使用?!!
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • 如何在Linux下使用脚本实现程序的自动重启!望各位详解!
  • linux top命令详解以及top命令的各项使用技巧详细说明
  • c# 空合并运算符“??”的使用详解
  • 在android开发中尽量不要使用中文路径的问题详解
  • 深入SQLServer中ISNULL与NULLIF的使用详解
  • MYSQL 批量替换之replace语法的使用详解
  • 汇编语言rep movsd 的使用详解
  • 使用SQL Server判断文件是否存在后再删除(详解)
  • 深入C#中使用SqlDbType.Xml类型参数的使用详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 已经定义好了一个数组,使用中能否改变长度?
  • Linux下使用exec时, 命令行参数长度有限制吗?
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • asp程序使用的access在Linux下如何使用!
  • c/c++预处理命令预#,##使用介绍
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?
  • MySQL Workbench的下载安装与使用教程
  • redhat9内存使用率高达73%,怎么查看内存具体使用情况


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3