跟随我在oracle学习php(51)
HTTP協(xié)議
超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)
最常見B/s架構(gòu)中,使用,瀏覽器端與服務(wù)器端數(shù)據(jù)交互協(xié)議。
協(xié)議:約定好的一套語法規(guī)則。
?
規(guī)定:請求數(shù)據(jù)格式,與響應(yīng)數(shù)據(jù)格式。
是應(yīng)用層協(xié)議
?
?
請求協(xié)議
規(guī)范,瀏覽器向服務(wù)器發(fā)送數(shù)據(jù)格式
?
以上內(nèi)容,就是瀏覽器在向服務(wù)器的http://shop.kang.com/index.php?p=back&c=Admin&a=login請求時(shí),所發(fā)送的數(shù)據(jù)。
?
請求數(shù)據(jù)分成三部分(列子中其實(shí)2個(gè)部分):
請求行:request_line
請求數(shù)據(jù)的第一行,用來說明當(dāng)前請求的最基本信息。
由三塊組成:
GET /index.php?p=back&c=Admin&a=login HTTP/1.1 換行
方式?資源地址(沒有域名)?協(xié)議版本?\r\n(回車換行CRLF)
?
請求頭:request_header
請求頭信息,請求標(biāo)頭
瀏覽器需要傳輸給服務(wù)器的屬性數(shù)據(jù)。
# 主機(jī),請求的主機(jī)。用于標(biāo)識一臺web服務(wù)器上的其中一個(gè)虛擬主機(jī)的。
Host: shop.kang.com
# 用戶代理UA,什么發(fā)出的請求。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
# 可以接受的內(nèi)容類型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
# 可以接受的語言
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
# 可以接受的數(shù)據(jù)編碼類型(壓縮編碼)
Accept-Encoding: gzip, deflate
# 攜帶的cookie數(shù)據(jù)
Cookie: PHPSESSID=i76sa2297sp1adlfk3e4eja612
# tcp連接類型 keep-alive保持激活
Connection: keep-alive
# Keep-Alive: 30 保持連接的時(shí)間段秒
# 緩存控制選項(xiàng)
Pragma: no-cache
Cache-Control: no-cache
?
注意語法格式:
頭,由標(biāo)識與內(nèi)容組成,使用冒號分隔(標(biāo)識與冒號間不能存在空格)
每個(gè)頭占用一行,行結(jié)尾,使用CRLF(回車換行\(zhòng)r\n)
可以存在多個(gè)頭。
頭信息結(jié)束使用空行標(biāo)志
?
?
?
請求主體:request_content
請求的主要用戶數(shù)據(jù)。
就是POST數(shù)據(jù)。
如果方式為POST,則需要請求分主體部,(GET沒有請求主體)
?
?
操作請求
通過瀏覽器所攜帶屬性,完成特定功能。
多語言程序(I18n,國際化程序)
?
項(xiàng)目:提供多套語言版本。
?
瀏覽器:請求時(shí),攜帶屬性,告知服務(wù)器,需要那種語言。
通過請求頭:Accept-Language 告知服務(wù)器,希望使用的語言。
?
?
?
?
?
項(xiàng)目:可以獲取瀏覽器需要的語言,載入相應(yīng)的語言包,做展示。
獲取:
?
?
?
找到最佳匹配:
項(xiàng)目存在默認(rèn)的語言。(瀏覽器需要的,項(xiàng)目都沒有提供)
確定瀏覽器可以接受的語言列表,找到服務(wù)器中,最匹配(權(quán)重依次匹配)
?
?
PHP發(fā)出請求(模擬請求)
采集程序。
公共平臺開發(fā)。
?
?
發(fā)出請求:
連接目標(biāo)服務(wù)器,發(fā)送符合請求協(xié)議格式的數(shù)據(jù)。
服務(wù)器就會將其視為請求,發(fā)出響應(yīng)!
?
連接:
Fsockopen();建立一個(gè)internet連接
?
?
處理請求數(shù)據(jù):
?
向服務(wù)器發(fā)送,發(fā)出請求。
通過函數(shù)?fwrite即可完成。(fwrite可以向文件和網(wǎng)絡(luò)資源位置發(fā)送數(shù)據(jù))
?
?
獲取服務(wù)器的響應(yīng)數(shù)據(jù)
使用 fgetS()完成:
Feof,(end of file)用于檢測是否到到數(shù)據(jù)流末尾。
?
?
斷開連接
?
?
?
POST請求
存在請求主體數(shù)據(jù)。
請求行:POST
請求頭:存在對請求主體的描述
請求主體:post數(shù)據(jù)
?
?
?
?
?
CURL-Client URL
PHP擴(kuò)展。
可以用來模擬URL客戶端(瀏覽器,請求代理)的工具擴(kuò)展。
開啟擴(kuò)展
?
Apacherestart
Tip:
依賴類庫:
Php目錄:
?
?
將以上文件拷貝到系統(tǒng)目錄(windows中),將php目錄設(shè)置為path環(huán)境變量。
?
?
?
?
模擬GET
Curl資源?= curl_init()初始化curl
curl_setopt(curl資源,選項(xiàng)標(biāo)志,選項(xiàng)值)
curl_exec(資源)發(fā)出請求
curl_close()關(guān)閉資源
?
?
POST請求
?
?
處理響應(yīng)數(shù)據(jù)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//
請求執(zhí)行時(shí),不是將響應(yīng)直接輸出,而是以返回值的形式處理。
?
?
POST文件上傳
Post數(shù)據(jù)使用文件地址,前使用@標(biāo)志為文件而不是字符串。
?
處理響應(yīng)頭
CURLOPT_HEADER:是否獲取響應(yīng)頭數(shù)據(jù)
?
?
處理會話COOKIE
(模擬登錄)
接收服務(wù)器設(shè)置的cookie,并存儲于請求代理端:
CURLOPT_COOKIEJAR?指定存儲服務(wù)器所設(shè)置的cookie變量存儲位置。
?
?
發(fā)出請求時(shí)攜帶擁有的cookie:
CURLOPT_COOKIEFILE
請求時(shí)攜帶的cookie數(shù)據(jù)所在的位置。
?
?
?
響應(yīng)協(xié)議
?
也是三部分:
1響應(yīng)行2響應(yīng)頭3響應(yīng)主體
響應(yīng)行
響應(yīng)數(shù)據(jù)的第一行,響應(yīng)結(jié)果的概述
http/1.1 302 FoundCRLF
版本 響應(yīng)狀態(tài)碼?響應(yīng)消息
響應(yīng)狀態(tài)碼,和響應(yīng)消息,一一對應(yīng)。
?
302 Found:重定向,配合響應(yīng)頭Location使用。
404 Not Found:請求資源不存在。
403 Forbidden:沒有權(quán)限訪問該地址
200 ok: 請求成功
500 Server Internal Error: 服務(wù)器內(nèi)部錯(cuò)誤
?
響應(yīng)頭
服務(wù)器告知瀏覽器屬性信息。
響應(yīng)主體
主體數(shù)據(jù)(通過瀏覽器的查看源代碼所看到的內(nèi)容)
?
操作響應(yīng)
操作響應(yīng)頭,header()可以
操作響應(yīng)主體,任何的輸出,都是響應(yīng)主體。(echo, print,var_dump,PHP標(biāo)簽之外的所有HTML代碼)
?
控制器瀏覽器緩存
?
Expires:有效期,時(shí)間點(diǎn),GMT時(shí)間,格林威治平時(shí)。
Gmdate() 將時(shí)間戳格式化為格林威治平時(shí)。
D,星期
M,月(三個(gè)英文月)
?
?
?
HTTP下載
下載:文件從服務(wù)器端傳輸?shù)綖g覽器端。發(fā)生于服務(wù)器響應(yīng)時(shí)。
PHP僅僅需要將需要下載的內(nèi)容作為響應(yīng)主體輸出即可。
?
通過響應(yīng)頭:Content-Disposition:告知瀏覽器,接受到響應(yīng)主體后的處理方式。
值:attachment 表示以附件的方式處理響應(yīng)主體。
?
如果是文件的下載:
將文件內(nèi)容作為響應(yīng)主體輸出即可!
?
?
控制下載的文件名(默認(rèn)為請求的腳本名)
?
?
控制主體類型:
?
?
細(xì)致控制:
主體大小。
?
轉(zhuǎn)載于:https://www.cnblogs.com/RighTgraM/p/10925095.html
總結(jié)
以上是生活随笔為你收集整理的跟随我在oracle学习php(51)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于.Net + SqlServer的分
- 下一篇: 遍历磁盘根目录