get_headersでhttpsにアクセスしたらエラーが出たのでcurlにしたメモ


get_headersでhttpsにアクセスしたらエラーが出たのでcurlにしたメモget_headersでhttpsにアクセスしたらエラーが出たのでcurlにしたメモ

リンク切れチェックのためにget_headersでhttpsのページにアクセスしたら以下のエラーが出たのでその対処方法

PHP Warning:  get_headers(): Failed to enable crypto in ...

とりあえずget_headersをあきらめてhttpsのときはcurlを利用するように変更した。

以下完成形。

$url = 'https://example.com/aaa/bbb';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
if(curl_exec($ch) === false)
{
 echo 'Curl error: ' . curl_error($ch);
}

$info = curl_getinfo($ch);
echo $info['http_code'];
curl_close($ch);     

上記のコードでhttpsの場合のステータスコードが
取得できるようになった。

エラーを取得しておかないとなんでエラーになったか不明なので
以下のところが大事かも。

if(curl_exec($ch) === false)
{
 echo 'Curl error: ' . curl_error($ch);
}

あと、特定のURLにアクセスした際に以下のエラーがでました。

Curl error: Unknown SSL protocol error in connection to ...

これはPHPが自動で設定しているSSLプロトコルでは駄目と
いうことらしいので

curl_setopt($ch, CURLOPT_SSLVERSION, 1);

上記のように「TLSv1」を指定しました。

その他のCURLOPT_SSLVERSIONは以下のページに記載されてます。
curl_setopt
http://php.net/manual/ja/function.curl-setopt.php

カテゴリー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です