【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環境をご確認ください。