PHP的表单获取与HHTP请求方式
PHP獲取表單數(shù)據(jù)的方法
PHP獲取表單數(shù)據(jù)的方法主要有GET、POST和REQUEST三種方式。
注意,提交表單的方法只有POST和GET兩種。POST和GET都可以向Web服務(wù)器傳輸數(shù)據(jù)。
GET與POST對比
| 附加形式 | URL之后 | HTML HEADER |
| 參數(shù)處理方式 | URL編碼 | 無URL編碼 |
| 傳輸數(shù)據(jù)的大小 | 小于2kB | 理論上無限制 |
| 安全性 | 用戶可見,不安全 | 用戶不可見,安全 |
| 跨域 | 支持 | 支持 |
| 適用場景 | 數(shù)據(jù)查詢 | 數(shù)據(jù)添加、修改和刪除 |
GET
附加形式:GET方法的數(shù)據(jù)會附在URL之后(即把數(shù)據(jù)放置在HTTP協(xié)議頭中),以“?”分割URL和傳遞數(shù)據(jù),參數(shù)之間以“&”連接。使用GET方式時(shí),URL較長,數(shù)據(jù)可見。
參數(shù)處理方式 :GET方法傳輸參數(shù),如果數(shù)據(jù)是英文字母/數(shù)字,則原樣,若數(shù)據(jù)中包含空格或者漢字,則需要進(jìn)行編碼處理。相關(guān)的例子可以看這里提到的問題:URL 編碼
傳輸數(shù)據(jù)的大小:GET方法傳輸?shù)臄?shù)據(jù)量較小,不能大于2kB。
提交表單時(shí),method的默認(rèn)值是”GET”.
POST
附加形式:通過HTTP POST機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一些傳送到ACTION屬性所指的URL地址,用戶看不見過程,也不能直觀地看到傳輸過程。
參數(shù)處理方式 :POST把提交的數(shù)據(jù)防止在HTTP包中的包體中,不會對漢字進(jìn)行URL編碼處理。POST 提交的數(shù)據(jù)必須放在消息主體(entity-body)中,但協(xié)議并沒有規(guī)定數(shù)據(jù)必須使用什么編碼方式。但是,數(shù)據(jù)發(fā)送出去,還要服務(wù)端解析。POST 提交數(shù)據(jù)方案,包含了 Content-Type 和消息主體編碼方式兩部分。
傳輸數(shù)據(jù)的大小:POST方法的傳輸數(shù)據(jù)量較大,理論上沒有大小限制。
Http POST 提交數(shù)據(jù)的四種方式
- application/x-www-form-urlencoded (默認(rèn)常用的)
- multipart/form-data
- application/json
- text/xml,現(xiàn)在幾乎不用
HTTP 協(xié)議規(guī)定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來向服務(wù)端提交數(shù)據(jù)
REQUEST
$_REQUEST變量包含$_GET, $_POST和$_COOKIE的內(nèi)容。
$_REQUEST變量可以用來獲取通過“GET”和“POST”這兩種方法發(fā)送的表單數(shù)據(jù)。
PHP發(fā)送HHTP請求的幾種方式
cURL
cURL 是一個(gè)用來傳輸數(shù)據(jù)的工具,支持多種協(xié)議,如在 Linux 下用 curl 命令行可以發(fā)送各種 HTTP 請求。PHP 的 cURL 是一個(gè)底層的庫,它能根據(jù)不同協(xié)議跟各種服務(wù)器通訊,HTTP 協(xié)議是其中一種。
現(xiàn)代化的 PHP 開發(fā)框架中經(jīng)常會用到一個(gè)包,叫做 GuzzleHttp,它是一個(gè) HTTP 客戶端,也可以用來發(fā)送各種 HTTP 請求,GuzzleHttp 并不依賴 cURL 庫,而支持多種發(fā)送 HTTP 請求的方式。
stream流的方式
- 關(guān)于 PHP stream 的介紹文章
- stream_context_create 作用:創(chuàng)建并返回一個(gè)文本數(shù)據(jù)流并應(yīng)用各種選項(xiàng),可用于 fopen(), file_get_contents() 等過程的超時(shí)設(shè)置、代理服務(wù)器、請求方式、頭信息設(shè)置的特殊過程。
以一個(gè)post為例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<?php
/**
\* Created by PhpStorm.
\* User: tanteng
\* Date: 2017/7/22
\* Time: 13:48
\*/
function post($url, $data)
{
$postdata = http_build_query(
$data
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
return $result;
}
socket方式
使用套接字建立連接,拼接 HTTP 報(bào)文發(fā)送數(shù)據(jù)進(jìn)行 HTTP 請求。
一個(gè) GET 方式的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
參考資料
[1] HTTPS 與 SSL 證書概要
[2] 15 張思維導(dǎo)圖來快速學(xué)習(xí) PHP 語言基礎(chǔ)
總結(jié)
以上是生活随笔為你收集整理的PHP的表单获取与HHTP请求方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快手怎么把点赞的作品公开
- 下一篇: 《高性能PHP》学习笔记