はじめに

最近関わったプロジェクトでPHPのcURLを使用しWebAPIを呼び出す機会がありました。本稿は下記の項目でcURL使用法についてご紹介します。

PHP: curl_setopt – Manual:
https://www.php.net/manual/ja/function.curl-setopt.php

目次

  1. cURLとは
  2. cURLの基本的な使い方
  3. HTTP GETの例
  4. HTTP POSTの例
  5. cURLでよく使用するオプション
  6. 実際にWeb APIを呼び出してみる

1.cURLとは

cURLは、PHPでHTTPリクエストを扱えるようにするライブラリです。
HTTPリクエストとは、普段私たちがブラウザなどでWebサイトを閲覧しているときに行われている動作です。
ブラウザがWebサーバーへHTTPリクエストを送り、データを取得することでWebページが表示されます。
cURLは、このHTTPリクエストを扱うことができます。

HTTPリクエストを行い外部サイトのデータを取得する関数は他にもfile_get_contentsがありますが、cURL関数はヘッダやタイムアウト制御など細かな設定が容易に可能といった利点があります。

2.cURLの基本的な使い方

cURLを使用してHTTPリクエストを行う際は、以下の4ステップが基本となります。
セッション等と同じく、開始から終了までが一連の流れとなります。

  1. curl_init()
    • curlのセッションを初期化する
    • 返り値にcurlハンドルを返す
    • curlハンドルは、次の2.3.4.で利用する
  2. curl_setopt()
    • curlのオプションを設定する
    • オプションを配列でまとめる場合はcurl_setopt_array()を使用する
  3. curl_exec()
    • curlのセッションを実行する
  4. curl_close()
    • curlのセッションをクローズする

3.HTTP GETの例

cURLの基本的な流れを理解したら、まずはGETでHTTPリクエストを行う簡単な例を見ていきましょう。
リクエスト先に弊社ホームページを指定し、データを取得してみます。

<?php

$url = "https://www.deliv.co.jp/";

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

// curlのオプションを設定する
$options = array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($ch, $options);

// curlを実行し、レスポンスデータを保存する
$response  = curl_exec($ch);

//ブラウザに表示する
echo $response;

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

?>

作成したPHPファイルにブラウザからアクセスすると、弊社ホームページが表示されます。
CURLOPT_RETURNTRANSFER はレスポンスデータを文字列として保存したい時に使用するオプションです。
オプションについては後ほど改めて紹介したいと思います。

4.HTTP POSTの例

JSON形式のデータを使用しPOSTでHTTPリクエストを行うサンプルです。

<?php

$url = "https://www.example.com/";

$post_fields = array(
  "title" => "example"
);
$headers = array(
  "Authorization: Bearer access_token",
  "Content-type: application/json"
);

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

// curlのオプションを設定する
$options = array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => $headers,
  CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => json_encode($post_fields)
);
curl_setopt_array($ch, $options);

// curlを実行し、レスポンスデータを保存する
$response  = curl_exec($ch);

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

?>

CURLOPT_POST CURLOPT_POSTFIELDS を指定することでPOSTを扱うことが可能です。
CURLOPT_HTTPHEADER でヘッダの内容をカスタマイズすることが出来ます。

5.cURLでよく使用するオプション

cURLのオプションについて簡単に説明します。
オプションは数がとても多いため、使用頻度の高いものをピックアップしています。

  • CURLOPT_URL
    • データを取得するURLを指定します。
    • オプションを使用せずに curl_init() の引数として指定することも可能です。
  • CURLOPT_RETURNTRANSFER
    • true を設定すると、curl_exec() の返り値を 文字列で返します。通常はデータを直接出力します。
    • レスポンスデータを文字列として保持したいときに使用するオプションです。
  • CURLOPT_HEADER
    • true を設定すると、ヘッダの内容も出力します。
  • CURLOPT_HTTPHEADER
    • HTTP ヘッダフィールドを配列形式で設定します。
    • 例)array(‘Content-type: text/plain’, ‘Content-length: 100’) 
  • CURLOPT_POST
    • true を設定すると、HTTP POST を行います。
  • CURLOPT_POSTFIELDS
    • HTTP “POST” で送信するすべてのデータを設定します。 
  • CURLOPT_CONNECTTIMEOUT
    • サーバーへの接続を確立できる最大時間(秒単位)です。
  • CURLOPT_TIMEOUT
    • cURL関数の実行にかけられる時間の最大値を設定します。

上に挙げた以外にもcURLには多くのオプションがあります。
さらに詳しく調べたい方は公式ドキュメントを参照してください。

PHP: curl_setopt – Manual:
https://www.php.net/manual/ja/function.curl-setopt.php

6.実際にWeb APIを呼び出してみる

では次に、実際にcURLを使ってWebAPIを呼び出してみたいと思います。
今回は、郵便番号データ配信サービス「zipcloud」にて提供されている郵便番号検索APIを叩いてみます。

zipcloud:http://zipcloud.ibsnet.co.jp/doc/api

リクエストパラメータに郵便番号を指定しAPIリクエストを行うと該当する地域データが取得できるサービスです。

※実際に行う場合、ライセンスに同意したことになるので、利用規約など確認の上自己判断でお願いします。

<?php

$zipcode = "108-0074";
$url = "https://zipcloud.ibsnet.co.jp/api/search?zipcode=".$zipcode;

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

// curlオプションを設定する
$options = array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($ch, $options);

// curlを実行し、URLの情報を保存する
$response  = curl_exec($ch);

//返却値を表示する
echo "<pre>";
print_r($response);
echo "</pre>";

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

?>

上記のようにGETリクエストを行うとJSON形式のデータがレスポンスとして返却されます。

実行結果

{
  "message": null,
  "results": [
    {
      "address1": "東京都",
      "address2": "港区",
      "address3": "高輪",
      "kana1": "トウキョウト",
      "kana2": "ミナトク",
      "kana3": "タカナワ",
      "prefcode": "13",
      "zipcode": "1080074"
    }
  ],
  "status": 200
}

このように、リクエストパラメータに指定した郵便番号の地域データを取得することが出来ました。

さいごに

今回はcURLライブラリの基本的な使用方法や実際にWeb APIを呼び出す方法などを紹介させていただきました。
本記事がPHPを学習する方に向けてご理解の一助となれば幸いです。