もともとPHPのfile_get_contents関数を使ってAPIからデータを取得するプログラムを書いていたのだが、ある時から謎のエラーでデータを取得できなくなっていた。
そこで、file_get_contents関数での取得をやめて、以下のようにcurl関数を使って取得する方法に切り替えたのだが、こちらも同様にうまくいかなかった。
$url = 'https://example.com/api/';
$data = http_build_query(
array(
'key' => 'xxxx',
)
);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
);
$ch = curl_init($url.'?'.$data);
curl_setopt_array($ch, $options);
$json = curl_exec($ch);
$info = curl_getinfo($ch);
$errorNo = curl_errno($ch);
curl_close($ch);
$errorNoを確認すると60となっており、どうやらこれはSSL対応サイト(httpsのサイト)と通信しようとした時に、サーバー証明書の検証で問題が発生した際に返るエラー番号のようだ。
このエラーを回避するには、$optionsの設定に以下の1行を追加すれば良い。
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
CURLOPT_SSL_VERIFYPEER => false, // この行を追加する
);
CURLOPT_SSL_VERIFYPEERにfalseを設定すると、サーバー証明書の検証をおこなわないようにできるので、エラーで困ったときはこの値をfalseにしておくと良い。