C# Get http header,just header,not contain body[c#美味]使用Http Head方法擷取檔案長度

來源:互聯網
上載者:User
文章目錄
  • 需求
  • 解決辦法
  • 理論
  • 實踐
  • 需求
  • 解決辦法
  • 理論
  • 實踐
[c#美味]使用Http Head方法擷取檔案長度需求

有一個固定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}\r\nLength:{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後面增加一個時間參數使緩衝失效實現即時擷取.

需求

有一個固定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}\r\nLength:{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後面增加一個時間參數使緩衝失效實現即時擷取.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.