get_headersでhttpsにアクセスしたらエラーが出たのでcurlにしたメモ
リンク切れチェックのためにget_headersでhttpsのページにアクセスしたら以下のエラーが出たのでその対処方法
1 | PHP Warning: get_headers(): Failed to enable crypto in ... |
とりあえずget_headersをあきらめてhttpsのときはcurlを利用するように変更した。
以下完成形。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $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の場合のステータスコードが
取得できるようになった。
エラーを取得しておかないとなんでエラーになったか不明なので
以下のところが大事かも。
1 2 3 4 | if (curl_exec( $ch ) === false) { echo 'Curl error: ' . curl_error( $ch ); } |
あと、特定のURLにアクセスした際に以下のエラーがでました。
1 | Curl error: Unknown SSL protocol error in connection to ... |
これはPHPが自動で設定しているSSLプロトコルでは駄目と
いうことらしいので
1 | curl_setopt( $ch , CURLOPT_SSLVERSION, 1); |
上記のように「TLSv1」を指定しました。
その他のCURLOPT_SSLVERSIONは以下のページに記載されてます。
curl_setopt
http://php.net/manual/ja/function.curl-setopt.php