C# HttpWebRequest提交數據方式淺析

C# HttpWebRequest提交數據方式學習以前咱們先來看看什麼是HttpWebRequest,它是 .net 基類庫中的一個類,在命名空間 System.Net 下面,用來使用戶經過HTTP協議和服務器交互。

C# HttpWebRequest的做用:

HttpWebRequest對HTTP協議進行了完整的封裝,對HTTP協議中的 Header, Content, Cookie 都作了屬性和方法的支持,很容易就能編寫出一個模擬瀏覽器自動登陸的程序。

C# HttpWebRequest提交數據方式:

程序使用HTTP協議和服務器交互主要是進行數據的提交,一般數據的提交是經過 GET 和 POST 兩種方式來完成,下面對這兩種方式進行一下說明:

C# HttpWebRequest提交數據方式1. GET 方式。

GET 方式經過在網絡地址附加參數來完成數據的提交,好比在地址 http://www.google.com/webhp?hl=zh-CN 中,前面部分http://www.google.com/webhp 表示數據提交的網址,後面部分 hl=zh-CN 表示附加的參數,其中 hl 表示一個鍵(key), zh-CN表示這個鍵對應的值(value)。程序代碼以下:

HttpWebRequest req =   

(HttpWebRequest) HttpWebRequest.Create(   

"http://www.google.com/webhp?hl=zh-CN" );  

req.Method = "GET";  

using (WebResponse wr = req.GetResponse())  

{  

   //在這裏對接收到的頁面內容進行處理  

} 

C# HttpWebRequest提交數據方式2. POST 方式。

POST 方式經過在頁面內容中填寫參數的方法來完成數據的提交,參數的格式和 GET 方式同樣,是相似於 hl=zh-CN&newwindow=1 這樣的結構。程序代碼以下:

string param = "hl=zh-CN&newwindow=1";  

byte[] bs = Encoding.ASCII.GetBytes(param);  

 

HttpWebRequest req =   

(HttpWebRequest) HttpWebRequest.Create(   

"http://www.google.com/intl/zh-CN/" );  

req.Method = "POST";  

req.ContentType = "application/x-www-form-urlencoded";  

req.ContentLength = bs.Length;  

 

using (Stream reqStream = req.GetRequestStream())  

{  

   reqStream.Write(bs, 0, bs.Length);  

}  

using (WebResponse wr = req.GetResponse())  

{  

   //在這裏對接收到的頁面內容進行處理  

}  

在上面的代碼中,咱們訪問了 www.google.com 的網址,分別以 GET 和 POST 方式提交了數據,並接收了返回的頁面內容。然而,若是提交的參數中含有中文,那麼這樣的處理是不夠的,須要對其進行編碼,讓對方網站可以識別。

C# HttpWebRequest提交數據方式3. 使用 GET 方式提交中文數據。

GET 方式經過在網絡地址中附加參數來完成數據提交,對於中文的編碼,經常使用的有 gb2312 和 utf8 兩種,用 gb2312 方式編碼訪問的程序代碼以下:

Encoding myEncoding = Encoding.GetEncoding("gb2312");  

string address = "http://www.baidu.com/s?"   

+ HttpUtility.UrlEncode("參數一", myEncoding) +  

 "=" + HttpUtility.UrlEncode("值一", myEncoding);  

HttpWebRequest req =   

(HttpWebRequest)HttpWebRequest.Create(address);  

req.Method = "GET";  

using (WebResponse wr = req.GetResponse())  

{  

   //在這裏對接收到的頁面內容進行處理  

}  

在上面的程序代碼中,咱們以 GET 方式訪問了網址 http://www.baidu.com/s ,傳遞了參數「參數一=值一」,因爲沒法告知對方提交數據的編碼類型,因此編碼方式要以對方的網站爲標準。常見的網站中, www.baidu.com (百度)的編碼方式是gb2312, www.google.com (谷歌)的編碼方式是 utf8。

C# HttpWebRequest提交數據方式4. 使用 POST 方式提交中文數據。

POST 方式經過在頁面內容中填寫參數的方法來完成數據的提交,因爲提交的參數中能夠說明使用的編碼方式,因此理論上能得到更大的兼容性。用 gb2312 方式編碼訪問的程序代碼以下:

Encoding myEncoding = Encoding.GetEncoding("gb2312");  

string param =   

HttpUtility.UrlEncode("參數一", myEncoding) +   

"=" + HttpUtility.UrlEncode("值一", myEncoding) +   

"&" + HttpUtility.UrlEncode("參數二", myEncoding) +  

"=" + HttpUtility.UrlEncode("值二", myEncoding);  

 

byte[] postBytes = Encoding.ASCII.GetBytes(param);  

 

HttpWebRequest req = (HttpWebRequest)  

HttpWebRequest.Create( "http://www.baidu.com/s" );  

req.Method = "POST";  

req.ContentType =   

"application/x-www-form-urlencoded;charset=gb2312";  

req.ContentLength = postBytes.Length;  

 

using (Stream reqStream = req.GetRequestStream())  

{  

   reqStream.Write(bs, 0, bs.Length);  

}  

using (WebResponse wr = req.GetResponse())  

{  

   //在這裏對接收到的頁面內容進行處理  

}   

從上面的代碼能夠看出, POST 中文數據的時候,先使用 UrlEncode 方法將中文字符轉換爲編碼後的 ASCII 碼,而後提交到服務器,提交的時候能夠說明編碼的方式,用來使對方服務器可以正確的解析。

以上列出了客戶端程序使用HTTP協議與服務器交互的狀況,經常使用的是 GET 和 POST 方式。如今流行的 WebService 也是經過 HTTP 協議來交互的,使用的是 POST 方法。與以上稍有所不一樣的是, WebService 提交的數據內容和接收到的數據內容都是使用了 XML 方式編碼。因此, HttpWebRequest 也可使用在調用 WebService 的狀況下。

C# HttpWebRequest提交數據方式的基本內容就向你介紹到這裏,但願對你瞭解和學習C# HttpWebRequest提交數據方式有所幫助。
相關文章
相關標籤/搜索