Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】CURLAUTH_BEARER定数の使い方

CURLAUTH_BEARER定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

CURLAUTH_BEARER定数は、PHPのcURL拡張機能において、HTTPリクエストの認証方式の一つであるBearer認証を指定するために用いられる定数です。

PHPのcURLは、ウェブサービスやAPIと通信を行う際に非常に便利な機能ですが、多くの場合、セキュリティ確保のために認証が必要となります。Bearer認証は、OAuth 2.0などのフレームワークで広く採用されている、トークンベースの認証方式です。この認証では、クライアントは事前に発行された「ベアラートークン」と呼ばれるアクセスキーを、HTTPリクエストのAuthorizationヘッダーにBearer [トークン文字列]という形式で含めてサーバーに送信します。サーバーは受け取ったトークンを検証し、リクエストの正当性を確認します。

このCURLAUTH_BEARER定数は、curl_setopt関数を使用してcURLリクエストの認証方式を設定する際に、CURLOPT_HTTPAUTHオプションの値として指定します。この定数を用いることで、cURLは開発者が別途指定したベアラートークンを基に、適切な認証ヘッダーを自動的に生成し、リクエストに含めて送信します。これにより、開発者はAPI連携時の認証処理を複雑な手動操作なしに実装でき、安全かつ効率的な通信を実現することができます。

構文(syntax)

1<?php
2
3$ch = curl_init();
4curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
5curl_close($ch);
6
7?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP cURLでBearer認証リクエストを送信する

1<?php
2
3/**
4 * Bearerトークン認証を使用してHTTP GETリクエストを送信します。
5 *
6 * @param string $url リクエストを送信するURL。
7 * @param string $bearerToken 認証に使用するBearerトークン。
8 * @return string|false 成功した場合はサーバーからのレスポンスボディ、失敗した場合はfalse。
9 */
10function sendBearerAuthenticatedRequest(string $url, string $bearerToken): string|false
11{
12    // cURLセッションを初期化します。
13    $ch = curl_init();
14
15    if ($ch === false) {
16        // cURLの初期化に失敗した場合、エラーメッセージを出力して終了します。
17        echo "エラー: cURLセッションの初期化に失敗しました。\n";
18        return false;
19    }
20
21    // cURLオプションを設定します。
22    curl_setopt($ch, CURLOPT_URL, $url); // リクエスト先のURLを指定します。
23    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // サーバーからのレスポンスを文字列として取得するよう設定します。
24    curl_setopt($ch, CURLOPT_FAILONERROR, false); // HTTPステータスコードが400番台以上でも自動的にエラーとしない (後で手動チェック)。
25
26    // 認証方式としてBearerトークン認証を指定します。
27    // CURLAUTH_BEARER定数は、cURLにBearerトークンを使用することを示します。
28    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
29
30    // Authorizationヘッダーを設定してBearerトークンを送信します。
31    // Bearerトークンは通常、'Authorization: Bearer <トークン>' という形式のHTTPヘッダーで送られます。
32    // CURLOPT_HTTPAUTHにCURLAUTH_BEARERを設定している場合でも、
33    // このヘッダーを明示的に指定することが一般的で推奨される方法です。
34    curl_setopt($ch, CURLOPT_HTTPHEADER, [
35        'Authorization: Bearer ' . $bearerToken,
36        'Accept: application/json' // 例として、JSON形式のレスポンスを受け入れることを示します。
37    ]);
38
39    // リクエストを実行し、サーバーからのレスポンスを取得します。
40    $response = curl_exec($ch);
41
42    // cURLの実行中にエラーが発生したかチェックします。
43    if (curl_errno($ch)) {
44        $errorMsg = curl_error($ch);
45        echo "cURLエラー: " . $errorMsg . "\n";
46        curl_close($ch);
47        return false;
48    }
49
50    // HTTPステータスコードを取得します。
51    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
52
53    // cURLセッションを終了し、リソースを解放します。
54    curl_close($ch);
55
56    // HTTPステータスコードが400番台以上(クライアントエラーまたはサーバーエラー)の場合、エラーとみなします。
57    if ($httpCode >= 400) {
58        echo "HTTPエラー: " . $httpCode . "\n";
59        echo "レスポンス:\n" . $response . "\n";
60        return false;
61    }
62
63    // 成功した場合はレスポンスボディを返します。
64    return $response;
65}
66
67// -----------------------------------------------------------------------------
68// サンプル使用方法: この関数を実際に呼び出す部分
69// -----------------------------------------------------------------------------
70
71// 注意: これらのURLとトークンはダミーです。
72// 実際のAPIエンドポイントと有効なBearerトークンに置き換える必要があります。
73$targetUrl = 'https://api.example.com/data'; // 実際のAPIエンドポイントに置き換えてください
74$myBearerToken = 'your_actual_bearer_token_here'; // 実際のBearerトークンに置き換えてください
75
76echo "Bearer認証を使用してURL: " . $targetUrl . " へリクエストを送信します。\n";
77
78// 関数を呼び出してAPIリクエストを送信します。
79$apiResponse = sendBearerAuthenticatedRequest($targetUrl, $myBearerToken);
80
81if ($apiResponse !== false) {
82    echo "\nAPIリクエスト成功!\n";
83    echo "サーバーからのレスポンス:\n";
84    // レスポンスがJSON形式であれば、整形して表示します。
85    $decodedResponse = json_decode($apiResponse);
86    if (json_last_error() === JSON_ERROR_NONE) {
87        echo json_encode($decodedResponse, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
88    } else {
89        echo $apiResponse; // JSON形式でなければそのまま表示します。
90    }
91    echo "\n";
92} else {
93    echo "\nAPIリクエストに失敗しました。上記のエラーメッセージを確認してください。\n";
94}

このPHPコードは、CURLAUTH_BEARER定数を利用して、Bearerトークン認証を伴うHTTP GETリクエストを送信するsendBearerAuthenticatedRequest関数を提供しています。これはAPIへのアクセスなど、セキュリティが求められる通信で広く使われる認証方式です。

まず、curl_init()でcURLセッションを開始し、CURLOPT_URLでリクエスト先のURLを指定します。サーバーからのレスポンスを文字列として取得するためにCURLOPT_RETURNTRANSFERtrueに設定しています。

認証の核となるのは、CURLOPT_HTTPAUTHオプションにCURLAUTH_BEARER定数を設定する部分です。これはBearerトークン認証を使用することをcURLに指示します。そして、CURLOPT_HTTPHEADERAuthorization: Bearer <トークン>形式のヘッダーを明示的に設定し、指定されたBearerトークンをリクエストに含めて送信します。これにより、APIサーバーはトークンを検証し、リクエストの正当性を判断します。

curl_exec()でリクエストが実行され、成功すればサーバーからのレスポンスボディが、失敗した場合はfalseが返されます。実行後には、curl_errno()でcURLエラーの有無を、curl_getinfo()でHTTPステータスコードを確認し、適切なエラーハンドリングを行っています。

sendBearerAuthenticatedRequest関数は、$url(リクエスト先のURL)と$bearerToken(認証用のBearerトークン)という2つの文字列引数を受け取ります。成功した場合はサーバーからのレスポンスボディを文字列として返し、ネットワークエラー、HTTPエラー、cURL初期化失敗時にはfalseを返します。この関数でBearer認証付きHTTPリクエストを送信できます。実際の利用時は、サンプル内のダミー情報を有効なものに置き換えてください。

サンプルコード中の$targetUrl$myBearerTokenは仮のものですので、実際のAPIエンドポイントと有効なBearerトークンに必ず置き換えてください。特にBearerトークンは機密情報のため、コード内に直接記述せず、環境変数などで安全に管理することを強く推奨します。認証方式としてCURLAUTH_BEARER定数を指定していますが、これに加えてAuthorization: Bearer <トークン>形式のHTTPヘッダーも明示的に設定することが一般的かつ推奨される方法です。cURL処理においては、curl_init()の成否、curl_exec()のエラー、そしてHTTPステータスコードの確認といった複数の段階でエラーチェックを行うことが非常に重要です。また、処理後はcurl_close()で必ずcURLリソースを解放してください。

PHP cURLでBearer認証リクエストを行う

1<?php
2
3/**
4 * 指定されたURLに対してBearerトークン認証付きのGETリクエストを実行します。
5 *
6 * この関数は、CURLAUTH_BEARER 定数を使用してcURLのBearer認証メカニズムを有効にし、
7 * トークンをCURLOPT_USERNAMEとして渡すことでAuthorizationヘッダーを自動生成させます。
8 *
9 * @param string $url リクエスト先のURL
10 * @param string $bearerToken 認証に使用するBearerトークン
11 * @return string|false レスポンスボディ、またはエラー時にはfalse
12 */
13function performBearerAuthRequest(string $url, string $bearerToken): string|false
14{
15    // cURLセッションを初期化します。
16    $ch = curl_init();
17
18    if ($ch === false) {
19        echo "エラー: cURLセッションの初期化に失敗しました。\n";
20        return false;
21    }
22
23    // リクエスト先のURLを設定します。
24    curl_setopt($ch, CURLOPT_URL, $url);
25
26    // サーバーからのレスポンスを文字列として取得するように設定します。
27    // trueにしない場合、レスポンスは直接出力されます。
28    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
29
30    // Bearerトークン認証を設定します。
31    // CURLAUTH_BEARER 定数を CURLOPT_HTTPAUTH に指定することで、
32    // cURLに対してBearer認証を使用するように指示します。
33    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
34
35    // BearerトークンをCURLOPT_USERNAMEとして渡します。
36    // CURLAUTH_BEARER が設定されている場合、cURLはこのユーザー名を
37    // 'Authorization: Bearer <トークン>' ヘッダーに自動的に変換します。
38    curl_setopt($ch, CURLOPT_USERNAME, $bearerToken);
39
40    // サーバー証明書の検証を行う設定 (本番環境では通常trueが推奨されます)
41    // テスト目的などでSSL証明書の検証を無効にする場合は以下のコメントアウトを外します。
42    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
43    // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
44
45    // HTTPリクエストを実行し、レスポンスを取得します。
46    $response = curl_exec($ch);
47
48    // cURL実行中にエラーが発生したかを確認します。
49    if (curl_errno($ch)) {
50        $error_msg = curl_error($ch);
51        echo "cURLエラーが発生しました: " . $error_msg . "\n";
52        curl_close($ch); // エラー発生時もセッションを閉じます。
53        return false;
54    }
55
56    // cURLセッションを閉じ、リソースを解放します。
57    curl_close($ch);
58
59    return $response;
60}
61
62// --- 使用例 ---
63// 以下の値を実際のAPIエンドポイントとBearerトークンに置き換えてください。
64// 例: $targetUrl = 'https://api.example.com/v1/user/profile';
65$targetUrl = 'https://httpbin.org/bearer'; // テスト用のBearer認証エンドポイント
66$myBearerToken = 'your_very_secret_bearer_token_12345'; // あなたのBearerトークン
67
68echo "Bearerトークン認証付きGETリクエストを開始します...\n";
69$result = performBearerAuthRequest($targetUrl, $myBearerToken);
70
71if ($result !== false) {
72    echo "リクエスト成功!取得したレスポンス:\n";
73    // 取得したJSONレスポンスを整形して表示する場合
74    $jsonResponse = json_decode($result);
75    if (json_last_error() === JSON_ERROR_NONE) {
76        echo json_encode($jsonResponse, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";
77    } else {
78        echo $result . "\n"; // JSONでない場合はそのまま表示
79    }
80} else {
81    echo "リクエストが失敗しました。\n";
82}
83
84?>

このPHPコードは、cURL拡張機能を用いて、Bearerトークン認証付きのGETリクエストを実行する方法を示しています。CURLAUTH_BEARER定数は、CURLOPT_HTTPAUTHオプションに設定することで、cURLにBearer認証を使用するよう指示します。

BearerトークンはCURLOPT_USERNAMEオプションに設定します。CURLAUTH_BEARERが有効な場合、cURLは自動的に『Authorization: Bearer <トークン>』というHTTPヘッダーを生成し、リクエストに含めます。これにより、複雑なヘッダー構築なしに、簡潔な認証付き通信が可能です。

performBearerAuthRequest関数は、リクエスト先のURL($url)とBearerトークン($bearerToken)を引数として受け取ります。関数内部ではcURLセッションの初期化、オプション設定、リクエスト実行、そしてエラーハンドリングが行われます。リクエストが成功した場合、サーバーからのレスポンスボディを文字列で返します。エラー発生時はfalseを返します。

CURLAUTH_BEARERはcURLでBearer認証を行うための重要な定数です。サンプルコードでは、この定数をCURLOPT_HTTPAUTHに設定し、BearerトークンをCURLOPT_USERNAMEに渡すことで、cURLがAuthorization: Bearer <トークン>ヘッダーを自動生成します。この自動生成の仕組みを理解することが、手動でヘッダーを設定する誤りを防ぐ上で特に重要です。Bearerトークンはパスワードと同等の機密情報ですので、コード内に直接記述せず、環境変数や設定ファイルから安全に取得するよう徹底してください。また、本番環境ではSSL証明書の検証(CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST)を必ず有効に保ち、無効化はセキュリティリスクとなります。cURL処理では予期せぬエラーが発生しやすいため、curl_init()curl_exec()の戻り値、curl_errno()などを用いた丁寧なエラーハンドリングを実践してください。

関連コンテンツ

関連IT用語

関連プログラミング言語