PHPにおけるcURLを使ったGETリクエスト

解説:PHPにおけるcURLを使ったGETリクエストGETリクエストの概要と、PHPでcurlコマンドを使ってGETリクエストを実装する方法を解説します。
1 min read
curl GET Request with PHP

curl は、URLを使用してデータを転送するためのコマンドラインツールおよびライブラリです。ウェブ開発においては、curlはコマンドラインやスクリプトから直接、ウェブサイトやAPIなどのさまざまなインターネットリソースを要求したり、操作したりするのに使用されます。

curlは、HTTP、HTTPS、FTP、FTPSなどの幅広いプロトコルに対応しているため、ファイル転送、データ取得、API統合など、非常に幅広い用途に用いることができます。curlは複雑な操作を処理し、さまざまなタイプのリクエストを送信できるため、アプリケーションとリモートサーバー間のシームレスな通信を可能にするうえで不可欠なツールとなっています。また、柔軟で使いやすいことから、現代のウェブ開発ワークフローにおいて基盤を成す要素となっています。

GETリクエストは、ウェブサーバー上の指定されたリソースから情報やデータを取得する、ウェブ通信の重要なコンポーネントです。このチュートリアルでは、curlを使ってPHPでGET リクエストを送信する方法を学びます。

GETリクエストとは

GETリクエストとは、Web サーバー上の指定されたリソースから情報やデータを取得する、 HTTPメソッド です。例えば、ブラウザにURLを入力してEnterキーを押すと、GETリクエストがトリガーされます。ブラウザはサーバーにGETリクエストを送信し、サーバーから返されたウェブページがブラウザに表示されます。

GETリクエストの目的は、HTMLページ、画像、ドキュメント、APIからのデータなど、特定のリソースをサーバーに要求することです。GETリクエストの簡潔さはそのメソッドにあります。つまり、GETはリクエストの対象となるサーバーやリソースの状態を変更しない冪等性が保証されなくてはいけませんGETリクエストは読み取り専用であり、通常はデータを送信したりサーバーに変更を加えたりすることはありません。主な機能はデータの取得です。

GETリクエストでは、クエリパラメータと呼ばれるキーと値のペアをURLに追加することもできます。クエリパラメータを使用すると、欲しいリソースを正確に指定することができます。たとえば、検索エンジンで何かを検索すると、入力したクエリはGETリクエストに含まれる一連のパラメータとして検索エンジンのサーバーに渡されます。サーバーはこれらのパラメータを処理し、関連する検索結果を取得してレスポンスとして送り返し、それがブラウザに表示されます。

GETリクエストはURL内のデータを公開するため、機微情報や機密情報の送信には適していないことに注意してください。URLを閲覧できるすべてのユーザーにパラメーターが表示されてしまいます。

PHPにおけるcurlを使ったGETリクエストの実装

このセクションでは、curlセッションの初期化、URLやその他のオプションの設定、パラメーターの設定、リモートリソースへのリクエストの送信、PHPアプリケーション内でのレスポンスの処理方法を学びます。

次へ進む前に、お使いのPHPバージョンがcurlに対応していることを確認してください。最近のPHPはcurlが初期設定で有効になっているものがほとんどですが、念のため確認しておくことをお勧めします。PHPのバージョンと設定は phpinfo() 関数を使用して確認できます。これを行うには、php-curl という名前のフォルダーを作成し、その中に info.php という名前のファイルを作成します。 ファイルに次のコードを貼り付けてください:

<?php
phpinfo();

ターミナルで php -S localhost:8000 コマンドを実行し、ブラウザで http://localhost:8000/info.php に移動します。表示されたウェブページで curl セクションまでスクロールし、curl対応が有効になっていることを確認してください:

PHPにおけるcurlを使用したGETリクエストの実装

curlが有効になっていることを確認したら、curlセッションを初期化する前に、プロジェクトのルートフォルダに curl.php という名前の新しいファイルを作成する必要があります。次に、新しい curl.php ファイルに次のコードを入力してください:

<?php
$ch = curl_init();

これにより curl_init() 関数を使用したcurlセッションが開始されます。この関数は新しいcurlセッションを初期化し、 curlハンドルのインスタンスを返します。これは、オプション設定やリクエストの送信など、curlを使った操作に欠かせないツールです。

URLとその他のオプションの設定

URLの設定を含むcurlオプションの設定は、PHPでcurlを使用してHTTPリクエストを行う上で非常に重要です。ターゲットサーバー、実行されるリクエストのタイプ(GET、POST など)、および必要な認証やパラメーターを決定することで、HTTPリクエストの基礎を確立します。

PHPには curl_setopt() 関数があり、これを使用すると、curlセッションハンドルのさまざまなオプションを簡単に設定でき、各種パラメーターや値を指定することで、curlリクエストの動作をカスタマイズできます。

curl_setopt() 関数は curl_setopt(CurlHandle $handle, int $option, mixed $value) という形式をとります。$handle は curl_init() 関数によって返されるハンドルです。$option は設定したい特定のオプション、$value はそのオプションに設定する値を表します。

URLを設定するには curl.php ファイルに次のコードを入力します:

$url = "https://dummyjson.com/products";
curl_setopt($ch, CURLOPT_URL, $url);

このコードは curl_setopt() 関数を使用してcurlセッションハンドルのURLオプションを設定します。 CURLOPT_URL はcurlリクエストのURLを設定するオプションを示す定数です。

では、他に設定できるオプションをいくつか見てみましょう。

より制御されたHTTPリクエストを可能にするcurlオプションを設定するには curl.php ファイルに次のコードを入力します:

// Set a timeout for the cURL request
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// return the response from the server as a string instead of outputting it directly
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// avoid following redirects, if any
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

このコードでは CURLOPT_TIMEOUT に数値として30が使用されており、curlリクエストの実行にかけられる時間の最大値が30秒に定義されています。これにより、リクエストに30秒以上かかった場合はタイムアウトとなり、長時間待たされるのを防ぐことができます。

CURLOPT_RETURNTRANSFER は trueに設定されており、サーバーからの応答を直接表示するのではなく、文字列として返すようにcurlに指示しています。これにより、PHPスクリプト内に応答データをキャプチャして操作することが可能になります。

最後に、 CURLOPT_FOLLOWLOCATION は falseに設定されており、curlがHTTPリダイレクトに自動的に従わないようになっています。自動リダイレクトを無効にすることで、スクリプトはリクエストフローを引き続き制御することができ、リダイレクト応答のカスタム処理が可能になります。

設定できるその他のオプションの詳細については、 PHPドキュメントを参照してください。

GETリクエストの実行

リクエストを実行してレスポンスを表示させるには、 curl.php ファイルに次のコードを入力してください:

// Execute the cURL request and capture the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
   echo 'Curl error: ' . curl_error($ch);
} else {
   // Decode JSON response if it is a JSON string
   $decodedResponse = json_decode($response, true);
   // Check if decoding was successful
   if ($decodedResponse !== null) {
       // Output the JSON response to the UI
       header('Content-Type: application/json');
       echo json_encode($decodedResponse, JSON_PRETTY_PRINT);
   } else {
       // If the response is not valid JSON, echo it as plain text
       echo $response;
   }
}
// Close cURL session
curl_close($ch);

次に、ブラウザで http://localhost:8000/curl.php に移動してください。ページが読み込まれると、製品がJSON形式の配列で表示されるはずです:

GETリクエストの実行

パラメーターを含むGETリクエストの送信

URL内でパラメーターを指定するには $url = "https://dummyjson.com/products"; の下に次のコードを入力してください:

// Query parameters
$params = [
   'limit' => 2
];

// Construct the complete URL with query parameters
$url .= '?' . http_build_query($params);

このコードでは "https://dummyjson.com/products" をベースURLとして定義します。次に、連想配列 $paramsの中にあるクエリパラメーター  limitに  2の値を入力して定義します。このパラメーターをURLに組み込むには、連想配列をURLエンコードされたクエリ文字列に変換する http_build_query($params) 関数を使用します。変換されたクエリ文字列は、疑問符を使用して元のURLに連結され、指定されたクエリパラメーターを含む完全なURLが作成されます。これによって、次のようなURLが完成します:"https://dummyjson.com/products?limit=2"

これをテストするには、ブラウザで http://localhost:8000/curl.php に移動してページをリロードしてください。JSON形式の2つの製品のみを含む配列が表示されるはずです:

パラメーターを含むGETリクエストの送信

まとめ

この記事では、PHPでcurl を使用してGETリクエストを実行する方法を学びました。GETリクエストの基本を理解することは、データのやり取りを効率化するための基礎となります。

さまざまなcurlオプションを使用するとGETリクエストをカスタマイズでき、タイムアウトを正確に制御したり、リダイレクトを管理したり、応答を文字列として受け取ってさらに操作したりすることが可能になります。このような柔軟性により、ウェブサーバーとのやりとりを微調整し、効率的でカスタマイズされたデータ取得を実現できます。

curlの詳しい使い方については、 Pythonでのcurlの使用方法を解説したこちらのガイド と、 プロキシでのcurlの使用方法を解説したこちらのチュートリアルをご覧ください。