標籤:
通過.Net中的兩個類HttpWebRequest類,HttpWebResponse類來實現Http的請求,響應處理。
第一個小測試是請求百度首頁(http://www.baidu.com)的內容,也就是要獲得百度首頁的html內容,
實現步驟:
1.通過WebRequest類建立一個HttpWebRequest的對象,該對象可以包含Http請求資訊。
(我有點不理解的是,為什麼要通過父類WebRequest來建立這個對象,而不能new一個HttpWebRequest來建立
,在HttpWebRequest類中的建構函式是:
protected HttpWebRequest(SerializationInfo serializationInfo, StreamingContext streamingContext); )
2.設定HttpWebRequest對象,其實就是設定Http請求報文的資訊內容。
3.從HttpWebRequest對象中擷取HttpWebResponse對象,該對象包含Http響應資訊。
4.從響應資訊中擷取回應標頭資訊和響應主體資訊。
部分實現代碼如下:
建立HttpWebRequest請求,佈建要求報文資訊
1 //請求2 string uri = http://www.baidu.com;3 HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;4 request.Method = "GET"; //要求方法5 request.ProtocolVersion = new Version(1, 1); //Http/1.1版本
//Add Other ...
接收響應,輸出回應標頭部資訊以及主體資訊
1 HttpWebResponse response= 2 request.GetResponse() as HttpWebResponse; 3 //Header 4 foreach (var item in response.Headers) 5 { 6 this.txt_Header.Text += item.ToString()+": " + 7 response.GetResponseHeader (item.ToString()) 8 + System.Environment.NewLine; 9 }10 11 //如果主體資訊不為空白,則接收主體資訊內容12 if (response.ContentLength <= 0)13 return;14 //接收響應主體資訊15 using(Stream stream =response.GetResponseStream())16 {17 int totalLength=(int)response.ContentLength;18 int numBytesRead=0;19 byte[] bytes=new byte[totalLength+1024];20 //通過一個迴圈讀取流中的資料,讀取完畢,跳出迴圈21 while( numBytesRead < totalLength )22 {23 int num=stream.Read(bytes,numBytesRead,1024); //每次希望讀取1024位元組24 if( num==0 ) //說明流中資料讀取完畢25 break;26 numBytesRead+=num;27 }
28 }
29 //將接收到的主體資料顯示到介面30 string content=Encoding.UTF8.GetString(bytes);31 this.txt_Content.Text=content;
第二個小測試是請求網上的一張圖片,並將圖片儲存到本地。
實現步驟與第一個小測試的非常類似,通過圖片的url向伺服器進行請求,然後
接收響應,響應的主體資訊內容儲存為本地圖片檔案。一小點不同之處就在於
需要將主體內容儲存為檔案形式,不是顯示到介面上。
關鍵代碼如下:
1 //... 2 string url="http://xx.xxx/xx.jpg"; //圖片資源的url 3 //... 4 using (Stream stream = response.GetResponseStream()) 5 { 6 //目前時間作為檔案名稱 7 string fileName = DateTime.Now.ToString("yyyyMMddhhmmss")+".jpg"; 8 using (Stream fsStream = new FileStream(fileName, FileMode.Create)) 9 {10 stream.CopyTo(fsStream);11 }12 }
附:運行結果如:
C#實現加簡單的Http請求