PHP強(qiáng)化之15 - GET 與 POST

----- 最近更新時間【2021-12-14】-----

PHP強(qiáng)化系列--目錄

一楔壤、簡介

在HTTP協(xié)議下鹤啡,輸入輸出的原型其實(shí)是HTTP請求與響應(yīng),客戶端向服務(wù)器端發(fā)送的數(shù)據(jù)稱之為請求挺邀,反之稱為響應(yīng)揉忘。雖然HTTP/1.1定義了8種請求方法,但是最常用的卻只有這兩種方法——GET和POST端铛,它們都允許發(fā)送自定義數(shù)據(jù)給服務(wù)器端。因此疲眷,可以通過接收這兩種方法的請求數(shù)據(jù)禾蚕,來實(shí)現(xiàn)輸入。

二狂丝、GET

GET是HTTP中最原始的請求方式换淆,在網(wǎng)頁中點(diǎn)擊一個鏈接或在地址欄輸入一個URL就會發(fā)送一個GET請求。在GET請求中几颜,數(shù)據(jù)是在URL后面來發(fā)送的倍试,就好像這樣:http://www.xxx.com/request.php?name=nosee123

大部分傳輸?shù)綖g覽器的html蛋哭,images县习,js,css, … 都是通過GET方法發(fā)出請求的谆趾。它是獲取數(shù)據(jù)的主要方法躁愿。

GET提交方式屬于顯式提交,也就是我們提交信息時沪蓬,所提交的數(shù)據(jù)會顯示在url中彤钟,那么我們提交的數(shù)據(jù)是可以被用戶查看到的,當(dāng)然這些信息都是一些不重要的東西跷叉。

1逸雹、get請求方式

1)表單提交 get
如果form表單中不指定method营搅,默認(rèn)也是GET請求,form中提交的數(shù)據(jù)將會附加在url之后梆砸。

<form action = "test.php" method = "get">
  <input type="text" name = 'name' value = 'nosee123'/>
  <input type= 'submit'  />   <input type= 'reeset' />
</form>

2)鏈接形式

<a herf="test.php?name=nosee123">這是個鏈接</a>

3)php中用方法 file_get_contents() 以get的方式獲取內(nèi)容

$url='http://www.jb51.net/';
$html = file_get_contents($url);
echo $html;

4)php中用方法 fopen() 打開url, 以get方式獲取內(nèi)容

$fp = fopen($url, 'r');
stream_get_meta_data($fp);
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
echo "url body: $result";
fclose($fp);

2剧防、注意:

當(dāng)使用GET方法發(fā)送數(shù)據(jù)時,則 <form>標(biāo)簽 action 屬性值中不能包含查詢字符串(即使包含也不會生效)
即:

<form action="post.php?act=login" method="get">
  ... ...
</form>

應(yīng)該改為:

<form action="post.php" method="get">
  ... ...
  <input type="hidden" name="act" value="login">
</form>

三辫樱、POST

GET方法的本意就是下載(與其對應(yīng)的是上傳方法PUT)峭拘,因此并不是專門用于傳遞數(shù)據(jù)的,它將請求數(shù)據(jù)全部經(jīng)過URL編碼后附在url的后面狮暑。這樣一來鸡挠,當(dāng)數(shù)據(jù)多時url就會變得很長——但這并不是問題的所在,問題所在是一些WEB瀏覽器或服務(wù)器程序會限制這行字符串的長度搬男。這時拣展,就需要用到POST方法了。

顧名思義缔逛,POST方法的主要用途就是“傳遞”數(shù)據(jù)备埃,它將數(shù)據(jù)放在所有請求標(biāo)題的后面上傳,這樣一來褐奴,無論有多少數(shù)據(jù)上傳都不成問題了(這樣請求數(shù)據(jù)的大小之取決于WEB服務(wù)允許的尺寸了)按脚。通常來說,對于表單數(shù)據(jù)敦冬,如無特別需求都是使用POST方法來上傳辅搬,這樣就無須去擔(dān)心url的長度了。

1脖旱、post請求方式

1)表單提交post

<form action = "test.php" method = "post">
  <input type="text" name = 'name' value = 'nosee123'/>
  <input type= 'submit'  />  <input type= 'reeset' />
</form>

2)php中用 file_get_contents() 函數(shù),以post方式獲取內(nèi)容

$data = array ('foo' => 'bar');
$data = http_build_query($data);  // 生成 URL-encode 之后的請求字符串
 
$opts = array (
  'http' => array (
    'method' => 'POST',
    'header'=> "Content-type: application/x-www-form-urlencodedrn" .
    "Content-Length: " . strlen($data) . "\r\n",
    'content' => $data
  )
);
 
$context = stream_context_create($opts);   // 創(chuàng)建資源流上下文
$html = file_get_contents('http://localhost/e/admin/test.html', false, $context);
 
echo $html;

3)使用curl庫模擬post或get請求

$url = "http://nosee123.com/test_post.php";
$post_data = array (
"name" => "nosee",
"url" => "http://www.nosee123.com",
"action" => "Submit"
);

$ch = curl_init($url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, 1);  // 設(shè)置請求為post類型
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  // 添加post數(shù)據(jù)到請求中
$str = curl_exec($ch);  // 執(zhí)行post請求堪遂,獲得回復(fù)
curl_close($ch);

echo $str ;   //查看執(zhí)行結(jié)果

2、注意:

在默認(rèn)的情況下萌庆,post提交的信息最多不會超過8m溶褪,不過我們也可以在php.ini中修改post_max_size的值來進(jìn)行更改。

四践险、GET與POST的區(qū)別

  • get是從服務(wù)器上獲取數(shù)據(jù)猿妈,post是向服務(wù)器傳送數(shù)據(jù)。
  • post發(fā)送的數(shù)據(jù)量更大(理論上沒有大小限制捏境,但服務(wù)器端一般都有設(shè)置最大上傳大杏谟巍);
    get有url長度限制垫言,傳輸?shù)臄?shù)據(jù)量蟹“(一般認(rèn)為不能大于2KB,因?yàn)槭躑RL長度限制)筷频,但效率較高蚌成。
  • get是把參數(shù)數(shù)據(jù)隊(duì)列加到URL的后面前痘,在URL中可以看到;post是將表單內(nèi)各個字段與其內(nèi)容放置在Http請求的Headers內(nèi)一起傳送到指定的URL地址担忧,用戶看不到這個過程芹缔。
  • get安全性非常低,post安全性較高瓶盛。但是get執(zhí)行效率卻比post方法好最欠。
  • get限制form表單的數(shù)據(jù)集的值必須為ASCII字符;而POST支持整個ISO10646字符集惩猫,默認(rèn)是用ISO-8859-1編碼芝硬。
    get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符,不能通過request.setCharacterEncoding("utf-8")設(shè)置中文字符轧房,服務(wù)器得到的中文字符可能為亂碼拌阴!post支持整個字符集ISO10646,可以通request.setCharacterEncoding("utf-8")正確顯示中文字符奶镶。
  • 在PHP中迟赃,POST方法的請求數(shù)據(jù)被封裝到了$_POST數(shù)組中,而GET方法的請求數(shù)據(jù)則被封裝到$_GET數(shù)組厂镇。

五纤壁、其它請求方式

1、HEAD:獲得報文首部

HEAD方法和GET方法一樣剪撬,只是不返回報文的主體部分摄乒,用于確認(rèn)URI的有效性及資源更新的日期時間等。

具體來說:1残黑、判斷類型; 2斋否、查看響應(yīng)中的狀態(tài)碼梨水,看對象是否存在(響應(yīng):請求執(zhí)行成功了,但無數(shù)據(jù)返回)茵臭; 3疫诽、測試資源是否被修改過

HEAD方法和GET方法的區(qū)別: GET方法有實(shí)體,HEAD方法無實(shí)體旦委。

2奇徒、PUT:傳輸文件

PUT方法用來傳輸文件,就像FTP協(xié)議的文件上傳一樣缨硝,要求在請求報文的主體中包含文件內(nèi)容摩钙,然后保存在請求URI指定的位置。但是HTTP/1.1的PUT方法自身不帶驗(yàn)證機(jī)制查辩,任何人都可以上傳文件胖笛,存在安全問題网持,故一般不用。

3长踊、DELETE:刪除文件

指明客戶端想讓服務(wù)器刪除某個資源功舀,與PUT方法相反,按URI刪除指定資源

4身弊、OPTIONS:詢問支持的方法

OPTIONS方法用來查詢針對請求URI指定資源支持的方法(客戶端詢問服務(wù)器可以提交哪些請求方法)

5辟汰、TRACE:追蹤路徑

客戶端可以對請求消息的傳輸路徑進(jìn)行追蹤,TRACE方法是讓W(xué)eb服務(wù)器端將之前的請求通信還給客戶端的方法

6阱佛、CONNECT:要求用隧道協(xié)議連接代理

CONNECT方法要求在與代理服務(wù)器通信時建立隧道帖汞,實(shí)現(xiàn)用隧道協(xié)議進(jìn)行TCP通信。主要使用SSL(安全套接層)和TLS(傳輸層安全)協(xié)議把通信內(nèi)容加密后經(jīng)網(wǎng)絡(luò)隧道傳輸瘫絮。

《THE END》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涨冀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子麦萤,更是在濱河造成了極大的恐慌鹿鳖,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壮莹,死亡現(xiàn)場離奇詭異翅帜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)命满,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門涝滴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胶台,你說我怎么就攤上這事歼疮。” “怎么了诈唬?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵韩脏,是天一觀的道長。 經(jīng)常有香客問我铸磅,道長赡矢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任阅仔,我火速辦了婚禮吹散,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘八酒。我一直安慰自己空民,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布丘跌。 她就那樣靜靜地躺著袭景,像睡著了一般唁桩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耸棒,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天荒澡,我揣著相機(jī)與錄音,去河邊找鬼与殃。 笑死单山,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幅疼。 我是一名探鬼主播米奸,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼爽篷!你這毒婦竟也來了悴晰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤逐工,失蹤者是張志新(化名)和其女友劉穎铡溪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泪喊,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棕硫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了袒啼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哈扮。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚓再,靈堂內(nèi)的尸體忽然破棺而出滑肉,到底是詐尸還是另有隱情,我是刑警寧澤摘仅,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布赦邻,位于F島的核電站,受9級特大地震影響实檀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜按声,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一膳犹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧签则,春花似錦须床、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钠惩。三九已至,卻和暖如春族阅,著一層夾襖步出監(jiān)牢的瞬間篓跛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工坦刀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愧沟,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓鲤遥,卻偏偏與公主長得像沐寺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盖奈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容