/**
* 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...