php使用curl訪問https示例分享

2021-07-04 16:03:00 字數 1950 閱讀 9063

/** 

* 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時資料過長問題

curl證書過期 curl 證書訪問https站點

curl 個人證書 又叫客戶端證書 訪問https站點 雙向認證 什麼是雙向認證模式?對於面向公眾使用者的https的 大部分屬於單向認證模式,它不需要對客戶端進行認證,不需要提供客戶端的個人證書,例如而雙向認證模式,為了驗證客戶端的合法性,要求客戶端在訪問伺服器時,出示自己的client cert...

curl使用 https訪問

訪問自己的https伺服器 自己在阿里雲上搭建了乙個https伺服器,以前一直用的是postman作為客戶端訪問,現在想嘗試用curl。下面的終端是 外網深度學習伺服器 所訪問的伺服器是我自己的阿里雲 curl cert client.crt key client.key insecure http...

curl檢查埠 使用curl獲取http狀態碼

shell中使用curl獲取http請求的狀態碼 bin bash 0 超時 logerr 檢測結果 t t請求超時或埠未開啟 logsucess 檢測結果 t t狀態正常 1 200 ok return 1 else 2 程式錯誤,狀態碼非200 logerr 檢測結果 t t應用程式錯誤 ret...