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

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

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

作成日: 更新日:

基本的な使い方

CURLINFO_HEADER_OUT定数は、PHPのcURL拡張機能において、直前のcURLセッションでリモートサーバーへ実際に送信されたHTTPリクエストヘッダーの情報を取得するために用いられる定数です。

PHPのcURL拡張機能は、プログラムからウェブサーバーと通信し、HTTPリクエストを送信するための強力な機能を提供します。このCURLINFO_HEADER_OUT定数は、cURLセッションが実行された後に、curl_getinfo()関数と組み合わせて使用することで、アプリケーションがどのようなリクエストヘッダーをサーバーに送信したかという具体的な文字列データを取得することを可能にします。

例えば、ウェブAPIへのリクエストを送信した際に、認証情報やデータ形式を示すContent-Typeなどのヘッダーが、意図した通りに正しく設定され、送信されているかを確認したい場合に非常に有用です。これにより、サーバー側でエラーが発生した場合でも、クライアント側が送信したリクエストの状況を詳細に分析し、問題の原因を特定する手助けとなります。特に、ネットワーク通信のデバッグや、API連携時のトラブルシューティングにおいて、実際に送信されたリクエストヘッダーを把握することは、開発者が問題解決を行う上で不可欠な情報源となります。システムエンジニアを目指す初心者の方々にとって、HTTP通信の内部で何が起こっているかを具体的に理解するための一助となるでしょう。

構文(syntax)

1<?php
2curl_getinfo($ch, CURLINFO_HEADER_OUT);
3?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

CURLINFO_HEADER_OUT は、PHPのcURL拡張モジュールで利用できる定数です。この定数は、リクエスト送信時にcURLがサーバーに送信したHTTPリクエストヘッダーの文字列を取得するために使用されます。この定数自体は値を返さず、curl_getinfo() 関数の引数として渡すことで、対応するヘッダー情報を取得するために機能します。

サンプルコード

curlinfo_header_outでリクエストヘッダ取得

1<?php
2
3/**
4 * CURLINFO_HEADER_OUT を使用して、cURL リクエストで送信されたヘッダ情報を取得するサンプル関数です。
5 * システムエンジニアを目指す初心者の方にも分かりやすいように、基本的な cURL の使い方と、
6 * 送信されたリクエストヘッダの確認方法を示します。
7 *
8 * @param string $url リクエストを送信するターゲットURL。
9 * @return string|false 送信されたリクエストヘッダの文字列、またはcURL操作が失敗した場合は false。
10 */
11function getSentRequestHeaders(string $url): string|false
12{
13    // 1. cURL セッションを初期化します。
14    // curl_init() は新しい cURL ハンドルを返します。失敗した場合は false を返します。
15    $ch = curl_init();
16
17    if ($ch === false) {
18        // 初期化に失敗した場合、エラーメッセージを出力して処理を終了します。
19        error_log("エラー: cURL セッションの初期化に失敗しました。");
20        return false;
21    }
22
23    // 2. cURL オプションを設定します。
24    // curl_setopt() を使用して、cURL ハンドルに様々なオプションを設定します。
25
26    // CURLOPT_URL: リクエストを送信するターゲットURLを設定します。
27    curl_setopt($ch, CURLOPT_URL, $url);
28
29    // CURLOPT_RETURNTRANSFER: curl_exec() が結果を直接出力するのではなく、文字列として返すようにします。
30    // これを true に設定することで、結果を変数に格納して後で処理できます。
31    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
32
33    // CURLOPT_HEADER: レスポンスヘッダも curl_exec() の戻り値(応答文字列)に含めるようにします。
34    // PHPマニュアルによると、CURLINFO_HEADER_OUT を使用するためには、このオプションを true に設定する必要があります。
35    curl_setopt($ch, CURLOPT_HEADER, true);
36
37    // 3. cURL リクエストを実行します。
38    // curl_exec() は、設定されたオプションに基づいてHTTPリクエストを実行します。
39    // 成功した場合は転送されたデータ(レスポンスヘッダとボディを含む)、失敗した場合は false を返します。
40    $response = curl_exec($ch);
41
42    if ($response === false) {
43        // リクエスト実行中にエラーが発生した場合、エラーメッセージを出力して処理を終了します。
44        error_log("エラー: cURL リクエストの実行に失敗しました。" . curl_error($ch));
45        curl_close($ch); // エラーの場合でも cURL セッションを閉じ、リソースを解放します。
46        return false;
47    }
48
49    // 4. CURLINFO_HEADER_OUT を使って、送信されたリクエストヘッダを取得します。
50    // curl_getinfo() は、cURL 転送に関する様々な情報を取得します。
51    // 第二引数に CURLINFO_HEADER_OUT を指定することで、直前の転送でサーバーに送信されたリクエストヘッダの文字列を取得できます。
52    $requestHeaders = curl_getinfo($ch, CURLINFO_HEADER_OUT);
53
54    // 5. cURL セッションを閉じ、リソースを解放します。
55    // curl_close() は、cURL セッションを終了し、関連するすべてのリソースを解放します。
56    curl_close($ch);
57
58    return $requestHeaders;
59}
60
61// 関数を呼び出して使用する例です。
62// ここでは、サンプルとして一般的にアクセス可能なウェブサイトのURLを指定します。
63$targetUrl = 'https://example.com/'; 
64
65echo "--------------------------------------------------\n";
66echo "ターゲットURL: " . $targetUrl . "\n";
67echo "このリクエストで送信されるヘッダ情報を取得します。\n";
68echo "--------------------------------------------------\n\n";
69
70// getSentRequestHeaders 関数を呼び出し、送信されたヘッダを取得します。
71$headers = getSentRequestHeaders($targetUrl);
72
73if ($headers !== false) {
74    echo "--- 送信されたリクエストヘッダ ---\n";
75    // 取得したヘッダ情報を出力します。
76    echo $headers;
77    echo "----------------------------------\n";
78} else {
79    echo "送信されたリクエストヘッダの取得に失敗しました。\n";
80}
81
82?>

PHPのCURLINFO_HEADER_OUTは、cURL拡張機能で使用される定数の一つです。この定数は、直前に行ったcURLリクエストで実際にサーバーへ送信されたリクエストヘッダの文字列を取得するために利用されます。これはデバッグやAPI連携時のリクエスト内容確認に大変役立ちます。

サンプルコードでは、getSentRequestHeaders関数を通じてCURLINFO_HEADER_OUTの基本的な使い方を示しています。まず、curl_init()でcURLセッションを初期化し、curl_setopt()関数でリクエストに関する様々な設定を行います。特に、CURLINFO_HEADER_OUTを正確に機能させるためには、CURLOPT_HEADERオプションをtrueに設定し、レスポンスヘッダも取得するようにしておく必要があります。その後、curl_exec()でHTTPリクエストを実行し、curl_getinfo()関数の第二引数にCURLINFO_HEADER_OUTを指定することで、送信されたリクエストヘッダの情報を取得できます。最後にcurl_close()でセッションを閉じ、リソースを解放します。

getSentRequestHeaders関数は、リクエストを送信するターゲットURL(string $url)を引数として受け取ります。この関数の戻り値は、成功した場合は送信されたリクエストヘッダの文字列(string)であり、cURL操作が失敗した場合にはfalseを返します。この定数を利用することで、自身のアプリケーションがどのようなHTTPリクエストを送信しているのかを正確に把握し、問題解決や連携の精度向上に繋げることができます。

CURLINFO_HEADER_OUTを利用するには、CURLOPT_HEADERオプションをtrueに設定することが必須です。この設定がないと、送信されたヘッダ情報が適切に記録されず、curl_getinfoで取得できない場合があります。cURL操作では、curl_init()curl_exec()などの各ステップで失敗する可能性があるため、常に戻り値をチェックし、エラー発生時にはcurl_error()で詳細を確認する堅牢なエラーハンドリングを心がけてください。処理の最後には、必ずcurl_close()を呼び出し、使用したリソースを解放することが重要です。これにより、メモリリークなどの問題を防ぎ、安全にプログラムを運用できます。

関連コンテンツ