我們已經了解Get方式請求數據到服務器的編寫(參考:Get方式提交數據到服務器),下面我們來接著了解Post請求數據的方式。
1.抓取Post數據流
Post方式請求數據的原理是怎樣的?與Get方式請求數據的過程有什么區(qū)別呢?下面我們通過httpwatch來抓取post方式請求數據的過程。
- 在web項目的jsp頁面中接著編寫post請求表單,效果如圖1-1所示:

圖1-1所示
圖1-1對應的jsp頁面代碼如例1-1:
- jsp代碼
- 在IE瀏覽器中訪問該登錄界面,當以post方式點擊“提交查詢內容”按鈕時,抓取數據流如圖1-2所示

圖1-2所示
1.Get請求和Post請求的區(qū)別
通過httpwatch抓取Post數據流(本例圖1-2)和Get數據流我們可以得出如下幾個結論:
- Get向特定的資源發(fā)出請求,Post向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。get和post只是一種傳遞數據的方式,get也可以把數據傳到服務器,它們的本質都是發(fā)送請求和接收結果,只是組織格式和數據量上有差別,這個在http協(xié)議中有介紹。
- Get是把參數拼接到URL路徑上傳到服務端,在瀏覽器中是可見的。Post是通過http Post機制,將表內各個字段和對應的內容放在HTML HEADER內一起傳送到ACTION屬性所指向的URL。
- Get傳輸的數據較?。╤ttp協(xié)議規(guī)定最大的數據長度是4KB,但實際中最大的數據長度是2KB),Post傳遞數據較大。
- Get安全性非常低,Post安全性相對較高。
2.Android編寫Post請求數據
在項目Get方式提交數據到服務器中我們已經編寫了其對應的請求頁面和請求響應事件,下面是在該項目的基礎上編寫Post請求數據的頁面布局和請求響應事件,具體操作如下:

圖1-3所示
- 在Activity中編寫“POST方式登錄“按鈕的點擊事件,具體代碼如例1-2:
例1-2

參考圖1-2的請求報文編寫Post請求的點擊事件,該方法和get請求的點擊事件基本上一致,紅色方框區(qū)域是兩種不同請求方式的區(qū)別。由于post請求參數是以流的形式提交到服務器的,所以在建立URL鏈接時該url路徑中無須拼接請求參數。調用setRequestProperty方法來設置請求參數的類型以及長度,并向服務端寫數據流。
運行程序,當點擊“Post方式登錄”按鈕時,效果如圖1-4所示:

圖1-4所示
此時服務端控制臺打印出如圖1-5所示信息:

圖1-5所示
本文版權歸傳智播客PHP培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客PHP培訓學院
首發(fā):http://xamj520.com/php/