PHPのcURL関数を使って外部サイトの情報を取得する方法【初心者向け】

プログラミング初心者向けにPHPのcURL関数を使って外部サイトにアクセスし、情報を取得する方法について解説しています。使い方は難しくないですし、リクエストもカスタマイズできるので情報の取得をする際に便利です。ぜひご覧ください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

ここではPHPで使うcURL関数について紹介します。

外部サイトにアクセスしていろいろな情報を取得したいと思った時に便利なのがこのcURL関数です。情報を取得するには他にfile_get_contentsという関数もありますが、リクエスト方法をカスタマイズしたい時に便利なのがcURL関数です。

ぜひ使い方をマスターしていきましょう。

そもそもPHPが何か分からない場合は、先にPHPとはの記事をご覧ください。

 

なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。

 

cURLとは

cURL関数を使用するとHTTPリクエストにより外部サイトからHTMLを取得したりすることができます。

HTTPリクエストとは普段safariなどのブラウザでWebサイトをみているときに内部で行われている動作です。

ブラウザからHTTPリクエストをサーバへおくり、サーバからはHTTPレスポンスがかえってきます。

こうしてWebサイトが表示されるのです。

今回紹介するcURL関数はこのHTTPリクエストを扱うことができます。

 

大石ゆかり

田島メンター!ブラウザやフォームを通さなくても、データを送ったり受信したりすることが出来るんですか?

田島悠介

そうなんだ。実は、ブラウザやフォームもHTTPリクエストを送信したり、受信したりしてるんだよ。

大石ゆかり

コードだけでもそれが出来るんですね。

田島悠介

そうそう。さっそくcURLの書き方を見てみよう!

 

cURLの書き方

cURLの基本的な流れを説明していきます。

1.curl_init() cURL セッションを初期化
2.curl_setopt() オプションを設定
3.curl_exec() 転送を実行
4.curl_close() セッションを終了

 

curl_init()

cURLセッションを初期化します。

resource curl_init ([ string $url = NULL ] )
返り値 curl_init ([ 取得するURL ] )

返り値は成功すれば、cURLハンドルを返します。

失敗したらFalse、取得するURLで情報の取得先を指定します。

 

curl_setopt()

cURL 転送用オプションを設定

bool curl_setopt ( resource $ch , int $option , mixed $value )
返り値 curl_setopt ( cURLハンドル , オプション , 値 )

返り値 成功でTrue、失敗でFalse

cURLハンドルはcurl_init()の返り値を設定する
オプションには設定するオプション名を指定する
値はオプションに設定する値。

 

curl_exec()

cURL セッションを実行します。

返り値 curl_exec ( cURLハンドル )

返り値 成功でTrue、失敗でFalse

cURLハンドルはcurl_init()の返り値を設定する

 

curl_close()

cURL セッションを終了します。

返り値 curl_close ( cURLハンドル )

返り値 なし

cURLハンドルはcurl_init()の返り値を設定する

 

大石ゆかり

ちょっと難しいですね。

田島悠介

curl_init関数で操作するためのオブジェクトというか、ハンドルを取得して、後は、curl_setoptで設定していく感じかな。

大石ゆかり

curl_exec関数で実行、curl_close関数で終了ですか。何か面倒ですね。

田島悠介

とりあえず、実際に代表的なサイトにcURLを使って、簡単にデータを受信してみよう!

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

それでは実際にcURL関数を使用して、PHPのプログラムを書いてみましょう。

 

cURLをつかって外部サイト「yahoo」の情報を取得する

<?php
  $url = "http://www.yahoo.co.jp/";
  $conn = curl_init(); // cURLセッションの初期化
  curl_setopt($conn, CURLOPT_URL, $url); // 取得するURLを指定
  curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す。
  $res =  curl_exec($conn);
  var_dump($res);
  curl_close($conn); //セッションの終了
?>

 

出力結果

$php 01.php
string(19591) "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="content-script-type" content="text/javascript">
<meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。">
 ---- 省略----

 

おわりに

cURLではHTTPリクエスト情報を扱うことができます。

これにより外部のサイトから情報を取得することも容易になります。プログラミングの幅が広がります。ぜひ使い方を覚えましょう。

 

大石ゆかり

データが受信できました。ブラウザの場合は、このソースコードを元にして表示してる感じですか?

田島悠介

そうなんだ。cURLを使って、COOKIEを送受信したり、POST送信も出来たりするんだ。

大石ゆかり

ブラウザやフォームによるデータの送受信は、実際にはコードで処理がされてたんですね。

田島悠介

そうなんだ。ちょっと難しいけど、こういう風にブラウザやフォームを経由せずにデータを送受信する仕組みがあるって覚えておくといいね。

 

また、PHPを勉強していて、

  • もっと効率的に勉強したい
  • 誰かに聞きながら学びたい
  • 自分でWebサービスを作りたい

と思ったことはないでしょうか。

 

そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。