相信在日常程式設計中我們大部分時間是在透過瀏覽器向伺服器發出GET或者POST請求。那麼問題來了,我們可不可以透過其它方式發出GET,POST請求呢?當然可以,不然你也就不會來了解SOCKET,也不會看到這篇文章。
稍微瞭解過HTTP協議的人知道,瀏覽器提交請求的實質是向伺服器傳送一個請求資訊,這個請求資訊包涵請求行、請求頭、請求體三部分組成。當然,請求體非必需。而後伺服器根據請求資訊返回一個響應資訊。連線斷開。下面我們透過 一張圖片來大概瞭解一下 。
瀏覽器發出請求,伺服器響應請求
圖片簡解釋
瀏覽器發出請求(格式)
請求首行:請求方式 請求路徑 協議和版本,例如:GET /index.html HTTP/1.1。
2~n請求頭:請求頭名稱:請求內容,即為key:value格式,例如:Host:localhost:8080。
空行:用來與請求體分開。
請求體:GET沒有請求體,只有POST有請求體。
GET請求
HTTP預設的請求方式是GET。
GET:
沒有請求體。
資料必須在1K之內。
GET請求資料會暴露在瀏覽器的位址列中。(密碼)
POST請求
資料不會出現在位址列中。
資料的大小沒有上限。
有請求體。
請求體中如果出現中文,會使用URL編碼。
使用表單可以傳送POST請求,但表單預設是GET
伺服器響應請求(格式)
響應首行
響應頭資訊
空行
響應體
透過上面的內容,我想大家大概知道了http的重要性了。作為php程式設計師在日常的專案開發中也肯定會用到http協議。如果想要進一步的提高自己的程式設計水平的話,那就有必要去深入的瞭解一下http協議。
目前我正在惡補學習關於php的http程式設計,很多東西以前還存在困惑的,現在也逐漸豁然開朗,也從中受益匪淺。希望分享給大家。下面我們先簡單的瞭解一下http協議,心及什麼是SOCKET。裡面涉及的知識比較多,所以只能儘量以大家能接受的方式給大家呈現。
什麼是HTTP協議
官方的解釋是:http(HTTP-Hypertext transfer protocol):超文字傳輸協議,基於請求/響應模式。
它詳細的規定了www伺服器與客戶端之間資料傳送的通訊規則。是一個無狀態協議,和FTP相比而言,ftp是有狀態的。
什麼是Socket?
Socket的原意是“孔”或“插座”的意思。一般普遍叫它“套接字”,它的作用是用來描述IP地址和各埠。我們可以將其理解為一個通訊鏈的控制代碼。它可以實現不同主機之間的互相通訊。
Internet上的主機都裝了多個服務軟體,比如XWAMP,phpstudy等,而且同時提供使用者多種服務,每種服務都有相應的一個Socket被繫結在相應的一個埠上面,而不同的埠它所對應的服務內容也不一樣。
所以,其實透過socket操作遠端檔案和讀寫本地檔案也就變得非常簡單。這裡我們可以把本地檔案看成是透過硬體傳輸的,而遠端檔案是透過internet傳遞。
下面我們一起透過一段程式碼來消化一下上面 的內容。
實現:透過fsocketopen()模擬socket將服務本地伺服器連結的內容顯示在瀏覽中;
程式碼:
1、先新建一個test.php文件:
<?php
echo "hello world!";
?>
並儲存.
2、新建一個test.php文件,並鍵入以下程式碼
$sk = fsockopen("localhost",80,$errno,$errstr,5); //使用localhost本地伺服器,80埠,如果出錯則返回錯誤號,錯誤內容,5秒執行時間;
$arr = array(
"GET /http/test.php HTTP/1.1",
"host:localhost",
"",
""
);
$str = implode(" ",$arr); //將$arr陣列以回車符分隔
fwrite($sk,$str); //將內容寫入文件流
while ($row = fread($sk,32)){ //迴圈讀取$sk裡面的內容每次讀32位元組
echo $row;
}
fclose($sk); //最後關閉
執行結果:如下圖
上面程式碼執行結果
希望對大家有用,不然今晚白熬夜了.
相信在日常程式設計中我們大部分時間是在透過瀏覽器向伺服器發出GET或者POST請求。那麼問題來了,我們可不可以透過其它方式發出GET,POST請求呢?當然可以,不然你也就不會來了解SOCKET,也不會看到這篇文章。
稍微瞭解過HTTP協議的人知道,瀏覽器提交請求的實質是向伺服器傳送一個請求資訊,這個請求資訊包涵請求行、請求頭、請求體三部分組成。當然,請求體非必需。而後伺服器根據請求資訊返回一個響應資訊。連線斷開。下面我們透過 一張圖片來大概瞭解一下 。
瀏覽器發出請求,伺服器響應請求
圖片簡解釋
瀏覽器發出請求(格式)
請求首行:請求方式 請求路徑 協議和版本,例如:GET /index.html HTTP/1.1。
2~n請求頭:請求頭名稱:請求內容,即為key:value格式,例如:Host:localhost:8080。
空行:用來與請求體分開。
請求體:GET沒有請求體,只有POST有請求體。
GET請求
HTTP預設的請求方式是GET。
GET:
沒有請求體。
資料必須在1K之內。
GET請求資料會暴露在瀏覽器的位址列中。(密碼)
POST請求
資料不會出現在位址列中。
資料的大小沒有上限。
有請求體。
請求體中如果出現中文,會使用URL編碼。
使用表單可以傳送POST請求,但表單預設是GET
伺服器響應請求(格式)
響應首行
響應頭資訊
空行
響應體
透過上面的內容,我想大家大概知道了http的重要性了。作為php程式設計師在日常的專案開發中也肯定會用到http協議。如果想要進一步的提高自己的程式設計水平的話,那就有必要去深入的瞭解一下http協議。
目前我正在惡補學習關於php的http程式設計,很多東西以前還存在困惑的,現在也逐漸豁然開朗,也從中受益匪淺。希望分享給大家。下面我們先簡單的瞭解一下http協議,心及什麼是SOCKET。裡面涉及的知識比較多,所以只能儘量以大家能接受的方式給大家呈現。
什麼是HTTP協議
官方的解釋是:http(HTTP-Hypertext transfer protocol):超文字傳輸協議,基於請求/響應模式。
它詳細的規定了www伺服器與客戶端之間資料傳送的通訊規則。是一個無狀態協議,和FTP相比而言,ftp是有狀態的。
什麼是Socket?
Socket的原意是“孔”或“插座”的意思。一般普遍叫它“套接字”,它的作用是用來描述IP地址和各埠。我們可以將其理解為一個通訊鏈的控制代碼。它可以實現不同主機之間的互相通訊。
Internet上的主機都裝了多個服務軟體,比如XWAMP,phpstudy等,而且同時提供使用者多種服務,每種服務都有相應的一個Socket被繫結在相應的一個埠上面,而不同的埠它所對應的服務內容也不一樣。
所以,其實透過socket操作遠端檔案和讀寫本地檔案也就變得非常簡單。這裡我們可以把本地檔案看成是透過硬體傳輸的,而遠端檔案是透過internet傳遞。
下面我們一起透過一段程式碼來消化一下上面 的內容。
實現:透過fsocketopen()模擬socket將服務本地伺服器連結的內容顯示在瀏覽中;
程式碼:
1、先新建一個test.php文件:
<?php
echo "hello world!";
?>
並儲存.
2、新建一個test.php文件,並鍵入以下程式碼
$sk = fsockopen("localhost",80,$errno,$errstr,5); //使用localhost本地伺服器,80埠,如果出錯則返回錯誤號,錯誤內容,5秒執行時間;
$arr = array(
"GET /http/test.php HTTP/1.1",
"host:localhost",
"",
""
);
$str = implode(" ",$arr); //將$arr陣列以回車符分隔
fwrite($sk,$str); //將內容寫入文件流
while ($row = fread($sk,32)){ //迴圈讀取$sk裡面的內容每次讀32位元組
echo $row;
}
fclose($sk); //最後關閉
執行結果:如下圖
上面程式碼執行結果
希望對大家有用,不然今晚白熬夜了.