PHPのcURL関数を使って外部サイトの情報を取得する方法【初心者向け】現役エンジニアが解説

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

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

監修してくれたメンター

nakamoto

アジマッチ有限会社 代表取締役
対応業務:PHP(Laravel)、機械学習、Vue.js、LAMP・AWS、越境EC、スマホアプリ、Unity、Rails、スマートコントラクト、講師、執筆、CTO

ここではPHPで使うcURL関数について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

外部サイトにアクセスしていろいろな情報を取得したいと思った時に便利なのがcURL関数です。

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

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

目次

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

cURLとは

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_init()は、cURLセッションを初期化します。

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

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

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

 

curl_setopt()

curl_setopt()は、cURL転送用オプションを設定します。

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

返り値 成功でTrue、失敗でFalseを意味します。

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

オプションには設定するオプション名を指定します。

値はオプションに設定する値を意味します。

 

curl_exec()

curl_exec()は、cURLセッションを実行します。

返り値 curl_exec ( cURLハンドル )

返り値 成功でTrue、失敗でFalseを意味します。

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

 

curl_close()

curl_close()は、cURLセッションを終了します。

返り値 curl_close ( cURLハンドル )

返り値 なし

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

 

大石ゆかり

ちょっと難しいですね。

田島悠介

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

大石ゆかり

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

田島悠介

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

 

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

実際に書いてみよう

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

 

cURLをつかって「Techacademy」の情報を取得する

今回は、cURL関数を利用して、https://techacademy.jp/でアクセスできる、テックアカデミーの情報を取得します。

サンプルコード

<?php
  $url = "https://techacademy.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); //セッションの終了

 

解説

1行目の<?phpでは、phpプログラムを開始することを意味します。

2行目の$url = “https://techacademy.jp/”;では、変数$urlにテックアカデミーのURLである、https://techacademy.jp/を代入します。

3行目の$conn = curl_init();では、cURLセッションの初期化の行います。

4行目のcurl_setopt($conn, CURLOPT_URL, $url); では、取得するURLを指定しています。

$connで初期化の指定を行います。

CURLOPT_URLでは、cURLにおいて、取得するURLを指定目的であるということを明示しています。

$urlでは2行目で指定したテックアカデミーのURLを指定します。

5行目のcurl_setopt($conn, CURLOPT_RETURNTRANSFER, true); では、 実行結果を文字列で返す処理を行っています。

CURLOPT_RETURNTRANSFERの指定でtrueを使用することで、curl_exec() の返り値を文字列で返します。

通常はデータを直接出力する処理になります。

6行目の$res = curl_exec($conn);では、変数$connをcurl_exec関数で実行した結果を、変数$resに代入しています。

7行目のvar_dump($res);では、変数$resをvar_dump関数でデバッグ表示しています。

今回はテックアカデミーのサイトの内容がデータとして表示されています。

8行目のcurl_close($conn); では、セッションを終了しています。

 

出力結果

string(725423) "<!doctype html>
<html data-n-head-ssr lang="ja" data-n-head="%7B%22lang%22:%7B%22ssr%22:%22ja%22%7D%7D">
  <head>
    <title>オンラインプログラミングスクール/受講者数No.1|テックアカデミー</title><meta data-n-head="ssr" charset="utf-8"><meta data-n-head="ssr" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="ssr" data-hid="keyword" name="keyword" content="プログラミング, ブートキャンプ, エンジニア, ruby on rails, パーソナルメンター"><meta data-n-head="ssr" data-hid="description" name="description" content="【テックアカデミー(TechAcademy)】受講者数No.1のオンラインプログラミングスクール。通過率10%を突破した現役エンジニアからマンツーマンで学べる。転職や副業に活かせるスキルを最短4週間で習得。"><meta data-n-head="ssr" data-hid="twitter:card" name="twitter:card" content="summary_large_image"><meta data-n-head="ssr" data-hid="twitter:site" name="twitter:site" content="@techacademy"><meta data-n-head="ssr" data-hid="twitter:creator" name="twitter:creator" content="@techacademy"><meta data-n-head="ssr" data-hid="twitter:title" name="twitter:title" content="TechAcademy [テックアカデミー]"><meta data-n-head="ssr" data-hid="twitter:description" name="twitter:description" content="大切なのは、誰から学ぶか。選抜された現役エンジニアから学ぶならテックアカデミー。"><meta data-n-head="ssr" data-hid="twitter:image" name="twitter:image" content="https://techacademy.jp/_nuxt/ogp/og-image.jpg"><meta data-n-head="ssr" data-hid="og:type" property="og:type" content="website"><meta data-n-head="ssr" data-hid="og:title" property="og:title" content="TechAcademy [テックアカデミー]"><meta data-n-head="ssr" data-hid="og:description" property="og:description" content="大切なのは、誰から学ぶか。選抜された現役エンジニアから学ぶならテックアカデミー。">
 ---- 省略----

 

おわりに

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

これにより外部のサイトから情報を取得することも容易になります。

プログラミングの幅が広がります。

ぜひ使い方を覚えましょう。

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

田島悠介

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

 

PHPを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

プログラミングを学習していて、このように思ったことはありませんか?

テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!