HttpWebRequest和HttpWebResponse兩個類別,是從另外兩個抽象類別繼承而來,各分別WebRequest和WebResponse兩個,你待會看程式的時候,就會發現比起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
要求的上傳資料
- 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
回傳的資料(網頁內容)
- 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();
沒有留言:
張貼留言