2009年4月13日 星期一

HttpWebRequest and HttpWebResponse

之前有介紹.NET Framework的WebClient這個類別,用了用了發現我還需要更多功能,只好往下一層類別來找答案。WebClient用起來真的很容易,程式沒有幾行就可以做到一個功能,所以學習的時候,建議先用這個類別來玩玩看,先從簡單的開始,這是解決問題的第一步。

HttpWebRequest和HttpWebResponse兩個類別,是從另外兩個抽象類別繼承而來,各分別WebRequestWebResponse兩個,你待會看程式的時候,就會發現比起WebClient要多幾個步驟才能做一件事。

在開始使用HttpWebRequest和HttpWebResponse之前,我們先來看看HTTP(Hypertext Transfer Protocol)這個通訊協定,似乎HTTP隨著WWW的發展越來越顯得重要,太多地方都用了!HTTP所傳送的message有兩種格式,一個是request message,另一個是response message。(這不是廢話,client-server的架構大概都是這樣。下面列出message的大概格式,主要是給個view,要詳細的資料請google)

Request Message
  • Request Line
    method+sp+URL+sp+Version+cr+lf
  • Header Lines
    header field name:+sp+value+cr+lf
    header field name:+sp+value+cr+lf
    ...
  • Blank Line
    cr+lf
  • Entity Body
    要求的上傳資料
Response Message
  • Status Line
    version+sp+status code+sp+phrase+cr+lf
  • Header Lines
    header field name:+sp+value+cr+lf
    header field name:+sp+value+cr+lf
    ...
  • Blank Line
    cr+lf
  • Entity Body
    回傳的資料(網頁內容)
說明一下上面兩個message的意思,因為畫表格說明不太容易,只好用條列式的方式展現。注意:所有的HTTP message都是用ASCII文字。(+號是為了區分欄位,實際上的message沒有出現)
  • cr= carriage return(回到最前面)
  • lf=line feed(換行)
  • sp=space(空白)
接下來看看程式,用同步(Synchronous)的方式:


//取得URI識別
Uri thisUri = new Uri(requestTextBox.Text);

HttpWebRequest thisHttpWebRequest = (HttpWebRequest)WebRequest.Create(thisUri);

//設定快取原則
HttpRequestCachePolicy thisHttpRequestCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
thisHttpWebRequest.CachePolicy = thisHttpRequestCachePolicy;

//提出同步要求,並且傳回包含回應的HttpWebResponse物件
HttpWebResponse thisHttpWebResponse = (HttpWebResponse)thisHttpWebRequest.GetResponse();

//取得回應的header相關資料
messageTextBox.Text += thisHttpWebResponse.IsFromCache.ToString() + Environment.NewLine;
messageTextBox.Text += thisHttpWebResponse.StatusCode.ToString() + Environment.NewLine;

//將多行的TextBox移到最後一列
messageTextBox.Select(messageTextBox.Text.Length, 0);
messageTextBox.ScrollToCaret();//將控制項的內容捲動到目前插入號的位置

//關閉資料流,並釋放連線以重複使用
thisHttpWebResponse.Close();

沒有留言:

張貼留言