PHP的表单获取与HHTP请求方式
PHP獲取表單數據的方法
PHP獲取表單數據的方法主要有GET、POST和REQUEST三種方式。
注意,提交表單的方法只有POST和GET兩種。POST和GET都可以向Web服務器傳輸數據。
GET與POST對比
| 附加形式 | URL之后 | HTML HEADER |
| 參數處理方式 | URL編碼 | 無URL編碼 |
| 傳輸數據的大小 | 小于2kB | 理論上無限制 |
| 安全性 | 用戶可見,不安全 | 用戶不可見,安全 |
| 跨域 | 支持 | 支持 |
| 適用場景 | 數據查詢 | 數據添加、修改和刪除 |
GET
附加形式:GET方法的數據會附在URL之后(即把數據放置在HTTP協議頭中),以“?”分割URL和傳遞數據,參數之間以“&”連接。使用GET方式時,URL較長,數據可見。
參數處理方式 :GET方法傳輸參數,如果數據是英文字母/數字,則原樣,若數據中包含空格或者漢字,則需要進行編碼處理。相關的例子可以看這里提到的問題:URL 編碼
傳輸數據的大小:GET方法傳輸的數據量較小,不能大于2kB。
提交表單時,method的默認值是”GET”.
POST
附加形式:通過HTTP POST機制,將表單內各個字段與其內容放置在HTML HEADER內一些傳送到ACTION屬性所指的URL地址,用戶看不見過程,也不能直觀地看到傳輸過程。
參數處理方式 :POST把提交的數據防止在HTTP包中的包體中,不會對漢字進行URL編碼處理。POST 提交的數據必須放在消息主體(entity-body)中,但協議并沒有規定數據必須使用什么編碼方式。但是,數據發送出去,還要服務端解析。POST 提交數據方案,包含了 Content-Type 和消息主體編碼方式兩部分。
傳輸數據的大小:POST方法的傳輸數據量較大,理論上沒有大小限制。
Http POST 提交數據的四種方式
- application/x-www-form-urlencoded (默認常用的)
- multipart/form-data
- application/json
- text/xml,現在幾乎不用
HTTP 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來向服務端提交數據
REQUEST
$_REQUEST變量包含$_GET, $_POST和$_COOKIE的內容。
$_REQUEST變量可以用來獲取通過“GET”和“POST”這兩種方法發送的表單數據。
PHP發送HHTP請求的幾種方式
cURL
cURL 是一個用來傳輸數據的工具,支持多種協議,如在 Linux 下用 curl 命令行可以發送各種 HTTP 請求。PHP 的 cURL 是一個底層的庫,它能根據不同協議跟各種服務器通訊,HTTP 協議是其中一種。
現代化的 PHP 開發框架中經常會用到一個包,叫做 GuzzleHttp,它是一個 HTTP 客戶端,也可以用來發送各種 HTTP 請求,GuzzleHttp 并不依賴 cURL 庫,而支持多種發送 HTTP 請求的方式。
stream流的方式
- 關于 PHP stream 的介紹文章
- stream_context_create 作用:創建并返回一個文本數據流并應用各種選項,可用于 fopen(), file_get_contents() 等過程的超時設置、代理服務器、請求方式、頭信息設置的特殊過程。
以一個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 報文發送數據進行 HTTP 請求。
一個 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 張思維導圖來快速學習 PHP 語言基礎
總結
以上是生活随笔為你收集整理的PHP的表单获取与HHTP请求方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快手怎么把点赞的作品公开
- 下一篇: 《高性能PHP》学习笔记