【PHP入門】cURL関数の使い方をマスターしよう!

PHPでHTTPリクエストによる外部サイトとの送受信処理を行うには、cURL関数を使用します。

この記事では、

・cURL関数とは?
・cURL関数の基本的な使い方
・GETメソッドとは?
・POSTメソッドとは?

という基本的な内容から、

・Cookieオプションの指定方法
・Proxyオプションの指定方法

などのcURL関数の応用的な使い方について解説します。

ここでは、cURL関数を使用してウェブサーバから情報を取得する処理について、詳しく解説していきます!

目次

cURLとは

cURLとは、HTTPリクエストをすることにより、外部サイトの情報を取得することができる関数です。

HTTPリクエストとは、クライアントがウェブサーバへリクエスト内容を要求することを言います。

リクエストにより、ウェブサーバからレスポンスが返ってくることにより、ウェブサイトを表示することができます。

そのようなHTTPリクエストを実行できる関数がcURLとなります。

cURL関数は基本的に以下の方法で使用します。

・curl_init()
cURLのセッションを初期化し、返り値にcURLハンドルを返します。

curl_init ([ string $url = NULL ] )

・curl_setopt()
cURLの転送用オプションを設定します。返り値にはboolean型の値を返します。

curl_setopt ( resource $cURLハンドル , int $オプション , mixed $値 )

・curl_exec()
cURLのセッションの実行時に使用します。この関数はセッションの初期化、オプション設定後に使用する必要があります。

curl_exec ( resource $cURLハンドル )

・curl_close()
cURLのセッションを閉じるときに使用します。

curl_close ( resource $cURLハンドル )

cURLの基本的な使い方

ここでは実際にcURL関数の使い方を見ていきましょう。

前述したcurl_init、curl_setopt、curl_exec、curl_close関数をそれぞれ使って、指定したURLの情報を取得します。

<?php

$url = "https://www.sejuku.net/blog/";

//cURLセッションを初期化する
$ch = curl_init();

//URLとオプションを指定する
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//URLの情報を取得する
$res =  curl_exec($ch);

//結果を表示する
var_dump($res);

//セッションを終了する
curl_close($conn);

?>

このサンプルを実行すると、ブラウザに指定したウェブページが表示されます。

ChromeやSafariなどのウェブブラウザから右クリックで「ページのソースを表示」を選択すると、文字列で指定したURLの情報が取得されています。

また、cURL関数はhttpのほかにhttpsによるSSL/TSL認証にも対応しています。

GETメソッドとは

HTTPリクエストでウェブサーバにさまざまな要求を行うときに、GETメソッドは使用されます。

たとえば、HTMLファイルや画層、動画などのデータを取得するときによく使われます。

先程紹介したcURLの処理はGETメソッドによりWebサーバへアクセスしています。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$res =  curl_exec($ch);
curl_close($conn);

POSTメソッドとは

POSTメソッドは、GETメソッド同様にウェブサーバに要求を行うときに使用します。

GETメソッドとの違いとしては、HTTPリクエストのbody要素にデータ内容を含み、テキストやバイナリのデータで送信することも可能です。

POSTメソッドは、以下のように指定します。

$url = "http://www.google.co.jp/";

//cURLセッションを初期化する
$ch = curl_init();

//送信データを指定
$data = array('samurai' => 1);

//URLとオプションを指定する
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

//URLの情報を取得する
$res =  curl_exec($ch);

//結果を表示する
var_dump($res);

//セッションを終了する
curl_close($ch);

POSTメソッドを指定するにはcurl_setoptの第二引数で、CURLOPT_POSTをtrueで指定にすると、POSTが有効になります。

また、POSTで送信するデータは、オプションCURLOPT_POSTFIELDSと送信データを指定する必要があります。

Cookieオプションの指定方法

クッキー(Cookie)とは、ウェブサイトにアクセスしたときにユーザーの訪問回数やアクセス日時などの閲覧情報を保存することを言います。

cURLでは、オプションでサーバからのクッキーの情報取得することができます。

以下にクッキー情報を取得するサンプルを記述します。

//cURLセッションを初期化する
$ch = curl_init();

//URLを指定する
curl_setopt($ch, CURLOPT_URL, $url);

//クッキー情報を取得するファイルを指定する
$cookiefile = 'cookie.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);

//URLの情報を取得する
$res = curl_exec($ch);

//セッションを終了する
curl_close($ch);

クッキーの情報を取得するにはcurl_setoptメソッドのオプションにCURLOPT_COOKIEJARと、CURLOPT_COOKIEFILEを設定し、ファイル名を指定します

このサンプルを実行すると、指定したcookie.txtに以下のように取得したクッキーの情報が書き込まれています。

# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

---省略---

Proxyオプションの指定方法

プロキシ(Proxy)とは、代理の意味でクライアントとサーバの間に存在する中継サーバのことを言います。

中継サーバを使用することで、クライアントの変わりにウェブページにアクセスすることができます。

プロキシの詳細な説明については、以下のページで詳しく解説しています。
http://wa3.i-3-i.info/word1752.html

cURLでは、オプションでプロキシの設定が可能です。

cURLでプロキシ経由で接続するには、以下のように指定します。

//cURLセッションを初期化する
$ch = curl_init();

//URLを指定する
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//プロキシを有効にする
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
//プロキシに接続するポート番号を指定
curl_setopt($ch, CURLOPT_PROXYPORT, '8080');
//プロキシのアドレスを指定する
curl_setopt($ch, CURLOPT_PROXY, 'http://www.xxx.xxx');
//プロキシに接続するためのIDとパスワードを指定する
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'xxxx');

//URLの情報を取得する
$res = curl_exec($ch);

//セッションを終了する
curl_close($ch);

まとめ

ここではPHPでHTTPリクエストを実行できるcURL関数の基本的な使い方や、

クッキー情報を取得したり、プロキシ経由で接続する方法などについて解説しました。

cURL関数は、ウェブサーバとHTTPリクエストによるやり取りを行うときに必須の機能ですので、仕組みはよく理解しておきましょう。

もしcURL関数の使い方を忘れてしまったら、この記事を思い出してくださいね。

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次