网络——提交表单数据(post方式)
【0】README
1) 本文文字描述 轉(zhuǎn)自 core java volume 2 , 旨在理解 網(wǎng)絡(luò)——提交表單數(shù)據(jù) 的基礎(chǔ)知識 ;
2) for source code, please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter3/postRequest
【1】提交表單數(shù)據(jù)(post方式)相關(guān)
0)執(zhí)行server 端腳本過程中的數(shù)據(jù)流:
1)在向web server 發(fā)送消息時, 通常會用到兩個命令: GET AND POST; (干貨——在向web server 發(fā)送消息時, 通常會用到兩個命令: GET AND POST;)
2)get 提交方式
2.1)使用get的時候, 只需要將參數(shù)添加到 URL 的結(jié)尾處即可, 這種 URL 的格式如下:
http://host/script?parameters
2.2) get 命令有一個缺點: 大多數(shù)瀏覽器對 get 請求中可以包含的字符數(shù)做了限制; (干貨——get 命令有一個缺點)
3)post 提交方式
- 3.1)在使用 post 命令時, 并不需要再URL 中添加任何參數(shù), 而是從 URLConnection 中獲取輸出流, 并將 名-值對寫入到流中。
3.2)POST提交方式,提交數(shù)據(jù)到 server 的詳細過程: (干貨——POST提交方式,提交數(shù)據(jù)到 server 的詳細過程)
step1) 創(chuàng)建一個URLConnection對象;
URL url = new URL(urlName);
URLConnection connection = url.openConnection();step2)調(diào)用 setDoOutput 方法建立一個用于輸出的連接:
connection.setDoOutput(true);
step3)調(diào)用 getOutputStream 方法獲得一個流, 可以通過這個流向 server 發(fā)送數(shù)據(jù), 如果要向 server 發(fā)送文本消息, 那么可以非常方便地將流包裝在 PrintWriter 對象中:
PrintWriter out = new PrintWriter(connnection.getOutputStream());
step4) 向 server 發(fā)送數(shù)據(jù);
out.println(name1 + “=” + URLEncoder.encode(value1, “UTF-8”) + “&”);
step5)關(guān)閉輸出流:
out.close();
4)在讀取響應(yīng)過程中會碰到一個問題:
- 4.1) 如果腳本運行錯誤,那么調(diào)用 connection.getInputStream() 時就會拋出一個 FileNotFoundException 異常。但是此server 仍然會向 瀏覽器返回一個 錯誤頁面(常見的404 錯誤);
- 4.2)為了捕捉這個錯誤頁面, 可以將 URLConnection 對象轉(zhuǎn)換為 HttpURLConnection 類并調(diào)用它的 getErrorStream 方法: (干貨——如何捕捉這個錯誤頁面)
InputStream err = ((HttpURLConnection) connection).getErrorStream();
5) 人們常會問: 除了我們提供的 數(shù)據(jù)外, URLConnection 到底還向server 發(fā)送了什么信息: (干貨——除了我們提供的數(shù)據(jù)外,URLConnection 到底還向server 發(fā)送了什么信息?)
5.1) URLConnection 對象首先向 server 發(fā)送一個 請求頭。 當(dāng)提交表單數(shù)據(jù)時, 該請求頭包含下面這行內(nèi)容:
Content-Type:application/x-www-form-urlencoded
5.2)而 POST 的請求頭還必須包括內(nèi)容長度, 如
Content-Length:24;
5.3)請求頭必須以空白行結(jié)尾。 緊隨其后的才是數(shù)據(jù)部分。 web server 過濾掉請求頭后將數(shù)據(jù)部分發(fā)送給server 端 腳本程序;
Attention) URLConnection 對象會把 你發(fā)送到 輸出流的所有數(shù)據(jù)都緩存起來, 這是因為在真正發(fā)送前, 它必須首先確定內(nèi)容的總長度;
6) 看個荔枝: (示例代碼 用于將 Post 數(shù)據(jù)發(fā)送給任何腳本, 他將數(shù)據(jù)放在如下的 .properties 文件:
url = http://esa.un.org/unpd/wpp/unpp/p2k0data_script.asp
Panel=1
Variable=2
Location=404
Varient=2
StartYear=1950
EndYear=2050
總結(jié)
以上是生活随笔為你收集整理的网络——提交表单数据(post方式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 窒息灭火法介绍 窒息灭火法简介
- 下一篇: 网络——发送email(一个简单荔枝)