【PHP】外部サイトのHTMLを取得

PHPで外部サイトにアクセスしていろいろな情報を取得したい場合に利用するのがcURL関数です。 外部サイトの情報を取得する手段には他にfile_get_contentsという関数もあります。file_get_contentsでは気軽に取得してその内容を取得してくれる便利な関数で、簡単に実装できるという大きなメリットが有る一方で、思ったとおりにタイムアウト時間をしていできないデメリットもあります。そのため、簡単な内容を取得するものだったり、内部のものを取得する場合にはfile_get_contentsを利用することもできると言われていますが、外部サイトのAPIなどを利用する場合にはfile_get_contentsは進められておらず、cURL関数を利用するといいとされています。

基本的なcURLの使い方は以下のようになります。

<?php
$url = "http://www.yahoo.co.jp/";
$ch = curl_init(); // はじめ

//オプション
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html =  curl_exec($ch);
var_dump($html);
curl_close($ch); //終了
?>

cURLの難しいところはoptionの指定だと思われます。file_get_contentsでは一行で行われていた作業がcURLでは複数行になってしま、optionの内容も何を指しているのかわからないことも多いかもしれません。それらのoptionは以下のサイトにまとめられています。 http://php.net/manual/ja/function.curl-setopt.php

よく利用されるオプションについて見てみたいと思います。

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

これは$headersで指定した方法でリクエストヘッダを指定しています。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

これは変数に保存するためのオプションです。公式ドキュメントには「TRUE を設定すると、curl_exec() の返り値を 文字列で返します。通常はデータを直接出力します。」と説明されています。

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

これはFALSEを設定すると、cURLはサーバー証明書の検証を行わないようになります。別の証明書をCURLOPT_CAINFOオプションで指定するか、CURLOPT_CAPATHオプションで証明ディレクトリを指定することができます。すなわち、サーバー証明書の検証を行わなくても、サイトの情報を取得できるようにするということです。安全なサイトにおいては利用してもいいですが、安全ではないサイトでは利用は控えたほうがいいオプションかもしれません。