標籤:php curl http
php curl 支援所有http協議支援的東西,比如簡單的GET , POST , HEAD , PUT,DELETE, 稍微複雜一點的SSL,proxy,COOKIE 等操作。http超文本傳輸, 比如網站地址是 wwww.hhailuo.com(紅海螺) , web伺服器配置的根目錄 /home/html 。 web伺服器運行以使用者/使用者組為user/user運行。
以上面為前提,先講講GET , 舉個最簡單的GET
1. 使用者: 我想要擷取紅海螺網站/home/html/ico.png 圖片,如果user組具有許可權 , 瀏覽器輸入 www.hhailuo.com/ico.png.
伺服器: 好的,給你。圖片本文如下 xxxxx .
靜態檔案通常伺服器直接發給使用者了。
php curl GET :最簡單的例子就是頁面採集,通過curl 實現瀏覽器一樣的GET行為。
2. 使用者: 我想擷取紅海螺網站文章,id為3 .
伺服器: 找你找的好辛苦,饒了一大圈才找到你,然後把文章id為3的文章發給使用者.
php動態請求,就是說我請求 www.hhailuo.com/a.php . 從這個url中是看不出伺服器要轉寄給使用者內容,伺服器要把www.hhailuo.com/a.php 解析了才會轉寄,也就是說可能中間有各種各樣的通訊,但只要請求存在,程式固定,紅海螺網站文章id 為3的文本在紅海螺伺服器中固定了。
講講POST,舉個簡單例子
1 . 使用者: 情境是使用者註冊,使用者名稱為a9618211, 密碼為 “你好” 等一些資訊。 使用者瀏覽器訪問 www.hhailuo.com/User/login 填寫表單,提交到 admin.hhailuo.com/User/Register 。
伺服器: 好的,已經收到了你提交的資料,然後做相關的處理,轉寄或者不轉寄東西給使用者,但可能會把使用者提交的資料寫資料庫或者寫檔案,也就是存到檔案或緩衝。
php curl POST: 就是不通過瀏覽器要把檔案,表單資料,文本,圖片,視頻等一些東西提交到指定的地方。 相對於瀏覽器操作有更強的靈活性,以及適應於很多應用情境。
應用情境就是查分系統,作為使用者我需要登入才能查到自己的分數。比如使用者A第一步登入,第二步點擊某個url 查看分數,相當於請求了兩次。大家都清楚http是無狀態的請求協議,
第二次請求的時候,伺服器怎麼知道是使用者A的請求呢。 從源頭分析,訪問伺服器用的是瀏覽器。 對的,瀏覽器有標實使用者的身份東西cookie檔案 . 但cookie 又是怎樣工作的呢。玩php的人
都知道,伺服器會釋放所有儲存在記憶體和檔案外的所以資訊。 伺服器中儲存了session 檔案. 關於瀏覽器中的cookie怎麼找到session的呢,肯定是發起http請求的時候把cookie中儲存的session作為tcp
的某個頭部參數傳遞過去,然後伺服器先驗證使用者的身份,再進行相關處理。 php curl 不是瀏覽器發起的行為,怎麼辦呢,有很多種方式處理,但主要的目的就是用curl 把cookie檔案給包含進去 .
講講 HEAD
HEAD應該大家用的也非常多
HTTP header的學習非常重要,可能大家容易忽略。 簡單介紹下我們經常用到的header .
講講瀏覽器和伺服器之間訊息傳遞的流程,內容主要包括message-header和message-body兩部分。首先傳遞http-header 就是message-header訊息 。http -header 訊息通常被分為4個部分:general header, request header, response header, entity header。通過header再判斷message-body 是否需要傳遞。
先講下keepalive ,應用情境:使用者A 訪問了a.php ,又訪問了b.php , c.php 等等。那麼問題來了,大家都知道HTTP是 TCP加了個頭部,每次使用者A輸入瀏覽器請求都會和伺服器端建立TCP長串連。
那麼問題來了,一個網頁可能有很多資源,比片,css檔案,js檔案,flash 等。 瀏覽器和伺服器如果沒有建立長串連,如果資源數過多,消耗在TCP串連的時間就太多了。 使用者每次請求都需要建立串連。
需要深入瞭解的同學可以找找資料關於最大串連數以及到期時間一些東西的設定,為什麼要這樣做。
然後聊聊瀏覽器cache , 大多數情況下我們會很明顯的感覺到訪問同一個地址,第一次會比其後面訪問慢很多,這就是瀏覽器cache .就是說我們很多資源都被緩衝到瀏覽器了,比片,js檔案,cs檔案,flash等。但為什麼程式員寫代碼的時候經常喜歡在檔案名稱後面跟隨其它的日期呢。 主要的原因還是擔心伺服器版本改了,瀏覽器一直用本地的版本。 從這裡你應該能體會到先發header 資訊,再拿訊息體的好處了。通過尾碼或者大小判斷檔案是否更新,更新了才傳遞訊息體給使用者,否則只需要傳遞header資訊,通知使用者沒有更新,也就是常說的304 (If-Modified-Since) 使用者是否在指定的時間內更新了檔案。
聊聊瀏覽器壓縮,因為瀏覽器是某個廠商製作的cpp應用程式,常用的壓縮方式gzip , 也就是說傳輸訊息體的時候可能會比較大,那麼瀏覽器和伺服器就商量好,我用某種演算法把檔案壓縮了,你用解密演算法把檔案解壓出來。這樣
可以減少傳輸過程中訊息體的大小。
聊聊瀏覽器編碼,除了英語外瀏覽器可以支援其它的編碼格式,如果每一個不同編碼格式代表不同國家的文字。 比如我網頁的編碼是中國,你後端傳一些法國的文字過來,我用中國的一些字元去匹配那肯定有很多事找不到的,因此就出現亂碼了。 問題來了, 我們就需要建立一個編碼公用庫,把每個國家的所有文字都包含進去。對,這就是utf-8 . 現在明白亂碼的原因了不。
寫了很多了後續再詳細講解Header , SSL, proxy等一些相關的知識 .
小提
php curl http 那些事