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

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

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

作成日: 更新日:

基本的な使い方

CURLINFO_HTTP_CONNECTCODE定数は、PHPのcURL拡張機能において、プロキシサーバーを介したHTTP CONNECTメソッドによる接続確立の際に、プロキシサーバーから返されるHTTPステータスコードを表す定数です。

PHPのcURL拡張機能は、ウェブサイトへのアクセスやAPI連携など、様々なプロトコルを利用したデータ転送を行うための強力なライブラリです。このCURLINFO_HTTP_CONNECTCODE定数は、curl_getinfo()関数と共に利用されます。curl_getinfo()関数は、cURLによるデータ転送が完了した後に、その転送に関する詳細な情報を取得するために用いられます。

特に、インターネット接続においてプロキシサーバーを経由する場合、クライアントはプロキシに対し、特定のホストへの安全なトンネル(主にSSL/TLS暗号化通信、つまりHTTPS通信のため)の確立を要求するためにHTTP CONNECTメソッドを使用します。この定数は、そのCONNECTリクエストに対してプロキシサーバーが応答として返したHTTPステータスコード(例えば、接続成功を示す200など)を取得する際に指定します。

これは、通常のHTTPリクエストに対する最終的なウェブサーバーからのステータスコード(例: 404 Not Found)とは異なり、プロキシサーバーとクライアントの間でのトンネル確立が正常に行われたか、あるいはプロキシ側で問題が発生したかを示す中間的な情報です。システムエンジニアにとって、プロキシ経由の通信における接続問題をデバッグする際に、この定数から得られる情報は非常に有用となります。プロキシを使用しない直接的なHTTPリクエストの場合には、この定数から有用な値は得られません。

構文(syntax)

1<?php
2var_dump(CURLINFO_HTTP_CONNECTCODE);
3?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP cURL HTTP接続コードを取得する

1<?php
2
3/**
4 * 指定されたURLに対してcURLリクエストを実行し、
5 * HTTP接続コードとHTTPステータスコードを取得して表示します。
6 *
7 * @param string $url 接続するターゲットURL
8 */
9function fetchCurlInfo(string $url): void
10{
11    // cURLセッションを初期化します。
12    $ch = curl_init();
13
14    // 接続先のURLを設定します。
15    curl_setopt($ch, CURLOPT_URL, $url);
16
17    // リクエストが成功した場合に、結果を文字列として返すように設定します。
18    // これを設定しないと、curl_exec()は直接出力します。
19    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
20
21    // ヘッダー情報をレスポンスに含めないように設定します。
22    curl_setopt($ch, CURLOPT_HEADER, false);
23
24    // リクエストを実行します。
25    // 実行結果(HTMLなど)は$responseに格納されますが、この例では使用しません。
26    $response = curl_exec($ch);
27
28    // cURLエラーが発生したかどうかを確認します。
29    if (curl_errno($ch)) {
30        // エラーが発生した場合、エラーメッセージを表示します。
31        echo 'cURLエラー: ' . curl_error($ch) . PHP_EOL;
32    } else {
33        // CURLINFO_HTTP_CONNECTCODE を使用して、HTTP接続コードを取得します。
34        // このコードは、主にプロキシサーバーへの接続試行時に返されるコードです。
35        // プロキシを使用しない直接接続の場合、通常は0が返されます。
36        $connectCode = curl_getinfo($ch, CURLINFO_HTTP_CONNECTCODE);
37
38        // CURLINFO_HTTP_CODE を使用して、HTTPステータスコード(例: 200 OK, 404 Not Found)を取得します。
39        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
40
41        echo "対象URL: {$url}" . PHP_EOL;
42        echo "HTTP接続コード (CURLINFO_HTTP_CONNECTCODE): {$connectCode}" . PHP_EOL;
43        echo "HTTPステータスコード (CURLINFO_HTTP_CODE): {$httpCode}" . PHP_EOL;
44    }
45
46    // cURLセッションを閉じ、リソースを解放します。
47    curl_close($ch);
48}
49
50// サンプルコードの実行例:
51// 実際にアクセス可能なURLを指定してください。
52// プロキシを使用しない場合、CURLINFO_HTTP_CONNECTCODE は通常0を返します。
53fetchCurlInfo('https://example.com');
54
55echo PHP_EOL; // 出力の区切り
56
57// 別のURLで試すこともできます (例: HTTPステータスコードが異なる場合など)
58// fetchCurlInfo('https://httpbin.org/status/404');
59
60// 存在しないドメインなどでcURLエラーを確認することもできます
61// fetchCurlInfo('https://example.invalid');

このサンプルコードは、PHPのcURL拡張機能を利用して、指定されたURLにHTTPリクエストを送信し、その接続情報やHTTPステータスコードを取得して表示する一連の処理を示しています。

まず、curl_init()関数でcURLセッションを初期化します。続いて、curl_setopt()関数を使い、接続先のURLをCURLOPT_URLで、リクエストの結果を文字列として返す設定をCURLOPT_RETURNTRANSFERで、ヘッダー情報をレスポンスに含めない設定をCURLOPT_HEADERでそれぞれ指定します。

オプション設定後、curl_exec()関数で実際のリクエストを実行します。リクエスト中にエラーが発生した場合は、curl_errno()curl_error()でエラーメッセージを取得して表示します。エラーがない場合、curl_getinfo()関数を使用して接続に関する詳細情報を取得します。

ここで注目するCURLINFO_HTTP_CONNECTCODEは、HTTPプロキシサーバーへの接続試行時に返されるコードであり、プロキシを使用しない直接接続の場合は通常0となります。一方、CURLINFO_HTTP_CODEは、Webサーバーからの応答として一般的に知られるHTTPステータスコード(例: 200 OK、404 Not Found)を取得するために使用されます。これら二つの定数は、それぞれ異なる種類の接続状態や応答内容を示しています。

最後に、curl_close()関数でcURLセッションを閉じ、使用したシステムリソースを解放します。このコードはfetchCurlInfoという関数として定義されており、$url引数にターゲットURLを文字列で渡して呼び出すと、実行結果が表示され、特定の戻り値はありません(void)。これにより、外部システムへの接続状況を詳細に確認することが可能です。

このサンプルコードでは、CURLINFO_HTTP_CONNECTCODEを使用してHTTP接続コードを取得していますが、これは主にプロキシサーバーへの接続試行時に返されるコードであり、一般的なHTTPステータスコード(例: 200 OK, 404 Not Found)とは異なる点にご注意ください。直接インターネットに接続する場合は通常0が返されます。情報を取得した後は、必ずcurl_errno()でエラーがないかを確認し、curl_error()で詳細を把握する習慣をつけましょう。また、cURLセッション終了時にはcurl_close()でリソースを確実に解放することが重要です。ネットワーク環境やプロキシ設定の有無によって、取得される値が変動する可能性もありますので、様々な状況で動作を確認することをおすすめします。

PHP cURL: 接続・レスポンスコード取得

1<?php
2
3/**
4 * cURLを使用してHTTP接続コードおよび最終HTTPレスポンスコードを取得する関数
5 *
6 * この関数は、指定されたURLにHTTPリクエストを送信し、
7 * 接続時のHTTPコード (CURLINFO_HTTP_CONNECTCODE) と
8 * 最終的なHTTPレスポンスコード (CURLINFO_HTTP_CODE) を表示します。
9 * システムエンジニアを目指す初心者の方は、これらをHTTP通信の状態を把握するために利用できます。
10 *
11 * @param string $url リクエストを送信するURL
12 * @return void
13 */
14function getCurlConnectionAndResponseCodes(string $url): void
15{
16    // cURLセッションを初期化します。
17    $ch = curl_init();
18
19    // ターゲットURLを設定します。
20    curl_setopt($ch, CURLOPT_URL, $url);
21    // レスポンス内容を文字列として取得し、直接出力しないように設定します。
22    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
23    // HTTPリダイレクトを自動的に追跡するように設定します。
24    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
25    // ヘッダー情報を取得しないように設定します。
26    curl_setopt($ch, CURLOPT_HEADER, false);
27
28    // cURLセッションを実行します。
29    curl_exec($ch);
30
31    // cURL実行中にエラーが発生したか確認します。
32    if (curl_errno($ch)) {
33        echo 'cURLエラーが発生しました: ' . curl_error($ch) . PHP_EOL;
34    } else {
35        // CURLINFO_HTTP_CONNECTCODE を使用して、接続時のHTTPコードを取得します。
36        // これはプロキシ経由での接続時などに特に有用で、接続フェーズのHTTPステータスを示します。
37        // 直接的なHTTP接続の場合、通常は0となります。
38        $connectCode = curl_getinfo($ch, CURLINFO_HTTP_CONNECTCODE);
39        echo '接続時のHTTPコード (CURLINFO_HTTP_CONNECTCODE): ' . $connectCode . PHP_EOL;
40
41        // CURLINFO_HTTP_CODE を使用して、最終的なHTTPレスポンスコードを取得します。
42        // これはWebサーバーからの応答(例: 200 OK, 404 Not Foundなど)を示す、
43        // 一般的なHTTPステータスコードです。キーワード「curlinfo_response_code」に関連します。
44        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
45        echo '最終的なHTTPレスポンスコード (CURLINFO_HTTP_CODE): ' . $httpCode . PHP_EOL;
46    }
47
48    // cURLセッションを閉じ、リソースを解放します。
49    curl_close($ch);
50}
51
52// サンプルとして、GoogleのトップページにHTTPリクエストを送信し、コードを表示します。
53getCurlConnectionAndResponseCodes('https://www.google.com');
54

このPHPコードは、cURL拡張機能を利用してHTTP通信の詳細な状態を把握する方法を示しています。getCurlConnectionAndResponseCodes関数は、指定されたURLへHTTPリクエストを送信し、接続時のHTTPコードと最終的なHTTPレスポンスコードを取得・表示します。この関数は引数として$url(リクエストを送信するURL)を受け取りますが、特定の処理結果を返さないため戻り値はvoidです。

コード内で使用されているCURLINFO_HTTP_CONNECTCODEは、HTTP接続が確立されるフェーズのステータスコードを示します。例えば、プロキシサーバーを介した接続時にプロキシとの通信状況などを表し、直接接続の場合は通常「0」となります。これにより、接続自体に問題があったかどうかを判断できます。一方、CURLINFO_HTTP_CODEは、Webサーバーからの最終的なHTTPレスポンスコード(例: 200 OK, 404 Not Foundなど)を示します。これはキーワード「curlinfo_response_code」とも関連する、一般的なHTTPステータスコードで、リクエストの結果が成功したか、どのようなエラーが発生したかを表します。

システムエンジニアを目指す初心者の方にとって、これらのHTTPコードはWebアプリケーションのデバッグや外部サービス連携時のトラブルシューティングにおいて、通信の状態や問題の原因を特定するための重要な情報となります。

このサンプルコードは、cURLの接続フェーズと最終レスポンスのHTTPコードを区別して取得する点が重要です。CURLINFO_HTTP_CONNECTCODEは接続時のコードを示し、プロキシ経由などで接続状況を確認する際に役立ちます。一方、CURLINFO_HTTP_CODEはWebサーバーからの最終的な応答コードを示しますので、それぞれの役割を理解して使い分けましょう。cURLを利用する際は、ネットワーク状況やサーバーの状態によりエラーが発生することがあるため、curl_errno()によるエラーチェックは必ず実施してください。また、セッション終了時にはcurl_close()でリソースを適切に解放することも忘れないように注意が必要です。このコードを動作させるには、PHPのcURL拡張機能が有効になっている必要がありますので、ご利用のPHP環境をご確認ください。

関連コンテンツ

関連IT用語

関連プログラミング言語