三年前寫過一篇《乙個簡陋的支援https的php curl封裝函式》,當時只是知其然不知其所以然,今天來詳細梳理一下。
為方便說明,先上**吧~ 這是今天重新封裝的乙個函式
/**
* curl post
* * @param string url
* @param array 資料
* @param int 請求超時時間
* @param bool https時是否進行嚴格認證
* @return string
*/function curlpost($url, $data = array(), $timeout = 30, $ca = true) else if ($ssl && !$ca)
curl_setopt($ch, curlopt_returntransfer, true);
curl_setopt($ch, curlopt_httpheader, array('expect:')); //避免data資料過長問題
//var_dump(curl_error($ch)); //檢視報錯資訊
curl_close($ch);
return $ret;
}
如果url位址是https打頭,那就走ssl,否則就走普通的http協議。
是否走https的話就安全了嗎?其實ssl也有不同的驗證程度。
例如需不需要驗證證書中的公用名呢?(btw:公用名(common name)一般來講就是填寫你將要申請ssl證書的網域名稱 (domain)或子網域名稱(sub domain)。)
需要驗證主機名嗎?
是任何證書都信任呢還是只信任ca頒布的呢?
(我擦嘞,電池快沒點了,只撿關鍵地兒說了 - -|||)
curl_setopt($ch, curlopt_ssl_verifypeer, true); // 只信任ca頒布的證書
curl_setopt($ch, curlopt_cainfo, $cacert); // ca根證書(用來驗證的**證書是否是ca頒布)
curl_setopt($ch, curlopt_ssl_verifyhost, 2); // 檢查證書中是否設定網域名稱,並且是否與提供的主機名匹配
如果**的證書是自己生成的,或者是網上的小機構申請的,那麼訪問時如果使用嚴格認證則不會通過,直接返回false。(對了,返回false時可以列印curl_error($ch)檢視具體錯誤資訊。)此時可以根據情況通過降低驗證程度來保證正常訪問,例如:
curl_setopt($ch, curlopt_ssl_verifypeer, false); // 信任任何證書
curl_setopt($ch, curlopt_ssl_verifyhost, 1); // 檢查證書中是否設定網域名稱(為0也可以,就是連網域名稱存在與否都不驗證了)
平時我們使用瀏覽器訪問各個https**時,有時會遇到證書不受信的提示,其實就是因為這些**的證書不是正規ca機構頒布的。
市面上各種瀏覽器中都內建了ca根證書列表資訊,訪問有ca頒布證書的**時,會根據根證書驗證這些**的證書,所以就不會有這個提示了。
關於ca根證書檔案,其實就是包含了各個主要ca機構的公鑰證書,用來驗證**的證書是否是這些機構頒發的。
這個主要是為了解決post時資料過長問題,具體參看之前的一篇部落格
《php curl post無法獲取響應內容的問題》
-------------------------------------------我是分割線---------------------------------------------
php中使用CURL之php curl詳解
curl是個什麼東西?簡單地說就是,curl是乙個庫,能讓你通過url和許多不同種的伺服器進行勾搭 搭訕和深入交流,並且還支援許多協議。並且人家還說了curl可以支援https認證 http post ftp上傳 cookies 簡單口令認證等等功能啦。說了那麼多其實沒什麼感覺吧,在應用中才有感覺,...
php curl 使用集合
原文章 it技術擎 裡面有更豐富的資料 下面的示例中舉例了php curl的幾種用法的彙總 包含1 post請求資料 2 get請求資料 3 傳送特定格式的資料 4 在請求的時候帶cookie 下面是 function curl post url,post data array method get...
php curl 擴充套件使用
1.curl介紹 curl 是乙個利用url語法規定來傳輸檔案和資料的工具,支援很多協議,如http ftp telnet等。最爽的是,php也支援 curl 庫。本文將介紹 curl 的一些高階特性,以及在php中如何運用它。2.基本結構 在學習更為複雜的功能之前,先來看一下在php中建立curl...