[PHP] file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:

繼上次 file_get_contents 遇到沒有指定 user-agent 就不能撈資料,這次又遇到新問題啦!

這一次的錯誤訊息是:
file_get_contents():SSL operation failed with code 1. OpenSSL Error messages:

主要原因就是網站 SSL 問題,撇除 Server 設定問題,程式工程師可以做的部分就是直接把它換成 curl,沒錯...又是換成 curl。

原來的程式碼:
$contents = file_get_contents($url, false, $context);

改版後的程式碼:
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $sendInfo);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);

$contents = curl_exec($ch);

curl_close($ch);

這一次我遇到的是 SSL 版本問題,所以這段程式的重點在於 curl_setopt($ch, CURLOPT_SSLVERSION, 6),其中 CURLOPT_SSLVERSION 有多個選項分別代表不同的版號,可以參考 https://www.php.net/manual/en/function.curl-setopt.php,而且不知道為什麼我寫常數 CURL_SSLVERSION_TLSv1_2 還不行,一定要寫 6。

留言