cURL 存取 HTTPS 時預設驗證憑證,若伺服器憑證自簽或不受信任會失敗。解決方法是關閉對等驗證。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過憑證驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 檢查加密演算法是否存在
<?php
function curl_https($url, $header=array(), $timeout=30){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$response = curl_exec($ch);
if($error=curl_error($ch)) die($error);
curl_close($ch);
return $response;
}
// 使用
$url = 'https://www.example.com/api/message.php';
$header = array('content-type:application/json');
echo curl_https($url, $header, 5);
?>
CURLOPT_CAINFO,而非關閉驗證。VERIFYPEER=false。