1.C# get post之 get 方式。
get 方式通過在網絡地址附加參數來完成數據的提交,比如在地址 http://www.google.com/webhp?hl=zh-CN 中,前面部分 http://www.google.com/webhp 表示數據提交的網址,後面部分 hl=zh-CN 表示附加的參數,其中 hl 表示一個鍵(key), zh-CN 表示這個鍵對應的值(value)。程序代碼如下:
1. HttpWebRequest req = (HttpWebRequest)
HttpWebRequest.Create( "http://www.google.com/webhp?hl=zh-CN" );
2. req.Method = "GET";
3. using (WebResponse wr = req.GetResponse())
4. {
5. //在這裏對接收到的頁面內容進行處理
6. }
2.C# get post之post方式。
post方式通過在頁面內容中填寫參數的方法來完成數據的提交,參數的格式和 get 方式一樣,是類似於 hl=zh-CN&newwindow=1 這樣的結構。程序代碼如下:
7. string param = "hl=zh-CN&newwindow=1";
8. byte[] bs = Encoding.ASCII.GetBytes(param);
9. HttpWebRequest req = (HttpWebRequest)
HttpWebRequest.Create( "http://www.google.com/intl/zh-CN/" );
10. req.Method = "POST";
11. req.ContentType = "application/x-www-form-urlencoded";
12. req.ContentLength = bs.Length;
13. using (Stream reqStream = req.GetRequestStream())
14. {
15. reqStream.Write(bs, 0, bs.Length);
16. }
17. using (WebResponse wr = req.GetResponse())
18. {
19. //在這裏對接收到的頁面內容進行處理
20. }
在上面的代碼中,我們訪問了 www.google.com 的網址,分別以 get 和post方式提交了數據,並接收了返回的頁面內容。然而,如果提交的參數中含有中文,那麼這樣的處理是不夠的,需要對其進行編碼,讓對方網站能夠識別。
3. C# get post之使用 get 方式提交中文數據。
get 方式通過在網絡地址中附加參數來完成數據提交,對於中文的編碼,常用的有 gb2312 和 utf8 兩種,用 gb2312 方式編碼訪問的程序代碼如下:
21. Encoding myEncoding = Encoding.GetEncoding("gb2312");
22. string address = "http://www.baidu.com/s?" +
HttpUtility.UrlEncode("參數一", myEncoding)
+ "=" + HttpUtility.UrlEncode("值一", myEncoding);
23. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
24. req.Method = "GET";
25. using (WebResponse wr = req.GetResponse())
26. {
27. //在這裏對接收到的頁面內容進行處理
28. }
在上面的程序代碼中,我們以 get 方式訪問了網址 http://www.baidu.com/s ,傳遞了參數“參數一=值一”,由於無法告知對方提交數據的編碼類型,所以編碼方式要以對方的網站爲標準。常見的網站中, www.baidu.com (百度)的編碼方式是 gb2312, www.google.com (谷歌)的編碼方式是 utf8。
4. C# get post之使用post方式提交中文數據。
post方式通過在頁面內容中填寫參數的方法來完成數據的提交,由於提交的參數中可以說明使用的編碼方式,所以理論上能獲得更大的兼容性。用 gb2312 方式編碼訪問的程序代碼如下:
29. Encoding myEncoding = Encoding.GetEncoding("gb2312");
30. string param = HttpUtility.UrlEncode("參數一", myEncoding) + "=" +
HttpUtility.UrlEncode("值一", myEncoding) + "&" +
HttpUtility.UrlEncode("參數二", myEncoding) + "="
+ HttpUtility.UrlEncode("值二", myEncoding);
31. byte[] postBytes = Encoding.ASCII.GetBytes(param);
32. HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create
( "http://www.baidu.com/s" );
33. req.Method = "POST";
34. req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
35. req.ContentLength = postBytes.Length;
36. using (Stream reqStream = req.GetRequestStream())
37. {
38. reqStream.Write(bs, 0, bs.Length);
39. }
40. using (WebResponse wr = req.GetResponse())
41. {
42. //在這裏對接收到的頁面內容進行處理
43. }
從上面的代碼可以看出,post中文數據的時候,先使用 UrlEncode 方法將中文字符轉換爲編碼後的 ASCII 碼,然後提交到服務器,提交的時候可以說明編碼的方式,用來使對方服務器能夠正確的解析。
以上列出了客戶端程序使用 HTTP 協議與服務器交互的情況,常用的是 get 和post方式。現在流行的 WebService 也是通過 HTTP 協議來交互的,使用的是post方法。與以上稍有所不同的是, WebService 提交的數據內容和接收到的數據內容都是使用了 XML 方式編碼。所以, HttpWebRequest 也可以使用在調用 WebService 的情況下。
以上就是對C# get post方法的簡單介紹。
------------------------------------------------------------------------------------------
C#中GET和POST的簡單區別
GET和POST是最基本常用的,表單提交中get和post方式的區別歸納如下幾點:
- GET是從服務器上獲取數據,POST是向服務器傳送數據。
- GET 是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,例如(url=asp.aspx?id=1)在URL中可以看到。POST是通過HTTP POST機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
- 對於GET方式,服務器端用Request.QueryString獲取變量的值,對於POST方式,服務器端用Request.Form獲取提交的數據。
- GET傳送的數據量較小,不能大於2KB(這主要是因爲受URL長度限制)。POST傳送的數據量較大,一般被默認爲不受限制。但理論上,限制取決於服務器的處理能力。
- GET 安全性較低,POST安全性較高。因爲GET在傳輸過程,數據被放在請求的URL中,而如今現有的很多服務器、代理服務器或者用戶代理都會將請求URL記 錄到日誌文件中,然後放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一 同顯示在用戶面前。POST的所有操作對用戶來說都是不可見的。
- 在FORM提交的時候,如果不指定Method,則默認爲 GET請求(.net默認是POST),Form中提交的數據將會附加在url之後,以?分開與url分開。字母數字字符原樣發送,但空格轉換爲“+” 號,其它符號轉換爲%XX,其中XX爲該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;GET方式提交的數據最多只能有 2048字節,而POST則沒有此限制。POST傳遞的參數在doc裏,也就http協議所傳遞的文本,接受時再解析參數部分。獲得參數。一般用POST 比較好。POST提交數據是隱式的,GET是通過在url裏面傳遞的,用來傳遞一些不需要保密的數據,GET是通過在URL裏傳遞參數,POST不是。