我們已經(jīng)了解Get方式請求數(shù)據(jù)到服務器的編寫(參考:Get方式提交數(shù)據(jù)到服務器),下面我們來接著了解Post請求數(shù)據(jù)的方式。
1.抓取Post數(shù)據(jù)流
Post方式請求數(shù)據(jù)的原理是怎樣的?與Get方式請求數(shù)據(jù)的過程有什么區(qū)別呢?下面我們通過httpwatch來抓取post方式請求數(shù)據(jù)的過程。
- 在web項目的jsp頁面中接著編寫post請求表單,效果如圖1-1所示:
圖1-1所示
圖1-1對應的jsp頁面代碼如例1-1:
- jsp代碼
- 在IE瀏覽器中訪問該登錄界面,當以post方式點擊“提交查詢內(nèi)容”按鈕時,抓取數(shù)據(jù)流如圖1-2所示
圖1-2所示
1.Get請求和Post請求的區(qū)別
通過httpwatch抓取Post數(shù)據(jù)流(本例圖1-2)和Get數(shù)據(jù)流我們可以得出如下幾個結(jié)論:
- Get向特定的資源發(fā)出請求,Post向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。get和post只是一種傳遞數(shù)據(jù)的方式,get也可以把數(shù)據(jù)傳到服務器,它們的本質(zhì)都是發(fā)送請求和接收結(jié)果,只是組織格式和數(shù)據(jù)量上有差別,這個在http協(xié)議中有介紹。
- Get是把參數(shù)拼接到URL路徑上傳到服務端,在瀏覽器中是可見的。Post是通過http Post機制,將表內(nèi)各個字段和對應的內(nèi)容放在HTML HEADER內(nèi)一起傳送到ACTION屬性所指向的URL。
- Get傳輸?shù)臄?shù)據(jù)較小(http協(xié)議規(guī)定最大的數(shù)據(jù)長度是4KB,但實際中最大的數(shù)據(jù)長度是2KB),Post傳遞數(shù)據(jù)較大。
- Get安全性非常低,Post安全性相對較高。
2.Android編寫Post請求數(shù)據(jù)
在項目Get方式提交數(shù)據(jù)到服務器中我們已經(jīng)編寫了其對應的請求頁面和請求響應事件,下面是在該項目的基礎(chǔ)上編寫Post請求數(shù)據(jù)的頁面布局和請求響應事件,具體操作如下:
- 調(diào)整xml頁面布局,效果如圖1-3所示:
圖1-3所示
- 在Activity中編寫“POST方式登錄“按鈕的點擊事件,具體代碼如例1-2:
例1-2
參考圖1-2的請求報文編寫Post請求的點擊事件,該方法和get請求的點擊事件基本上一致,紅色方框區(qū)域是兩種不同請求方式的區(qū)別。由于post請求參數(shù)是以流的形式提交到服務器的,所以在建立URL鏈接時該url路徑中無須拼接請求參數(shù)。調(diào)用setRequestProperty方法來設(shè)置請求參數(shù)的類型以及長度,并向服務端寫數(shù)據(jù)流。
運行程序,當點擊“Post方式登錄”按鈕時,效果如圖1-4所示:
圖1-4所示
此時服務端控制臺打印出如圖1-5所示信息:
圖1-5所示
本文版權(quán)歸傳智播客PHP培訓學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客PHP培訓學院
首發(fā):http://m.metathetuscanyresort.com/php/