【PHP8.x】CURLINFO_PROXY_SSL_VERIFYRESULT定数の使い方
CURLINFO_PROXY_SSL_VERIFYRESULT定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
CURLINFO_PROXY_SSL_VERIFYRESULT定数は、PHPのcURL拡張機能において、プロキシサーバーとのSSL/TLS接続における証明書検証の結果を表す定数です。
この定数は、curl_getinfo()関数と共に使用され、直前のcURL転送でプロキシサーバーのSSL証明書が正しく検証されたかどうかを示す数値を取得するために用いられます。プロキシサーバーを介してセキュアな通信を行う際に、その接続の信頼性を確認するために不可欠な情報を提供します。
通常、SSL証明書検証が成功した場合には、取得される値は0となります。0以外の値が返された場合、それはSSL証明書の検証に何らかの問題が発生したことを意味します。これらの非ゼロの値は、基盤となるOpenSSLなどのSSLライブラリによって生成されるエラーコードに対応しており、具体的なエラーの内容を示唆します。
システムエンジニアとして、インターネット経由で外部サービスと通信する際には、特にプロキシサーバーを介する場合でも、通信のセキュリティと信頼性を確保することが極めて重要です。この定数を利用することで、プロキシ経由のSSL/TLS通信が第三者による改ざんやなりすましのリスクにさらされていないか、開発者がプログラム的に確認できるようになります。安全な通信経路の確立は、アプリケーションの信頼性を高める上で不可欠な要素です。
構文(syntax)
1<?php 2$ch = curl_init(); 3curl_setopt($ch, CURLOPT_URL, 'https://www.example.com'); 4curl_setopt($ch, CURLOPT_PROXY, 'http://your.proxy.host:8080'); 5curl_setopt($ch, CURLOPT_PROXY_SSL_VERIFYPEER, true); 6 7curl_exec($ch); 8 9$proxy_ssl_verify_result = curl_getinfo($ch, CURLINFO_PROXY_SSL_VERIFYRESULT); 10 11echo $proxy_ssl_verify_result; 12 13curl_close($ch); 14?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHP cURL: プロキシSSL検証とレスポンスコード取得
1<?php 2 3/** 4 * cURLを使用して指定されたURLから情報を取得し、プロキシのSSL検証結果やHTTPレスポンスコードを表示します。 5 * システムエンジニアを目指す初心者向けに、CURLINFO_* 定数の利用方法を示します。 6 * 7 * @param string $url 情報を取得するURL。 8 * @param string|null $proxy プロキシサーバーのアドレスとポート (例: 'http://proxy.example.com:8080')。 9 * プロキシを使用しない場合は null を指定します。 10 * @return void 11 */ 12function fetchUrlInfoWithProxySslVerifyResult(string $url, ?string $proxy = null): void 13{ 14 // cURL セッションを初期化します。 15 $ch = curl_init(); 16 17 // cURL のオプションを設定します。 18 curl_setopt($ch, CURLOPT_URL, $url); 19 // 実行結果を文字列として返すように設定します (通常はブラウザに出力されます)。 20 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 21 // HTTPリダイレクトを自動的に追跡するように設定します。 22 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 23 24 // プロキシ設定が提供されている場合、cURL にプロキシを使用するように指示します。 25 if ($proxy !== null) { 26 curl_setopt($ch, CURLOPT_PROXY, $proxy); 27 echo "プロキシ設定: " . $proxy . "\n"; 28 echo "注意: このコードを実際に実行するには、指定されたプロキシサーバーが動作している必要があります。\n"; 29 // プロキシ経由でのSSL検証エラーを意図的に発生させるには、 30 // 不正な証明書を持つプロキシサーバーなど、特定の環境設定が必要です。 31 // 一般的な環境で CURLINFO_PROXY_SSL_VERIFYRESULT が0以外になることは稀です。 32 } else { 33 echo "プロキシは使用されません。\n"; 34 } 35 36 // HTTP リクエストを実行します。 37 $response = curl_exec($ch); 38 39 // cURL の実行中にエラーが発生したか確認します。 40 if (curl_errno($ch)) { 41 echo 'cURL エラーが発生しました: ' . curl_error($ch) . "\n"; 42 } else { 43 echo "対象URL: " . $url . "\n"; 44 45 // CURLINFO_RESPONSE_CODE を使用して、HTTPレスポンスコード(例: 200, 404, 500)を取得します。 46 // これはキーワード 'curlinfo_response_code' に関連する情報です。 47 $httpResponseCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); 48 echo 'HTTP レスポンスコード: ' . $httpResponseCode . "\n"; 49 50 // CURLINFO_PROXY_SSL_VERIFYRESULT を使用して、プロキシ経由のSSL検証結果を取得します。 51 // この定数は、プロキシサーバーのSSL証明書検証結果のエラーコードを示します。 52 // プロキシを使用していない場合や、プロキシを使用してもSSL検証に問題がない場合は、通常 '0' が返されます。 53 // '0' 以外の値は、OpenSSLのエラーコードに相当し、検証に失敗したことを意味します。 54 $proxySslVerifyResult = curl_getinfo($ch, CURLINFO_PROXY_SSL_VERIFYRESULT); 55 echo 'プロキシSSL検証結果 (CURLINFO_PROXY_SSL_VERIFYRESULT): ' . $proxySslVerifyResult . "\n"; 56 57 // 取得したコンテンツの一部を表示することもできます(必要に応じてコメントを外してください)。 58 // echo "取得したコンテンツの一部:\n" . substr((string)$response, 0, 200) . "...\n"; 59 } 60 61 // cURL セッションを閉じ、リソースを解放します。 62 curl_close($ch); 63} 64 65// --- サンプル使用例 --- 66 67// 実際にアクセス可能なURLを指定してください。 68$targetUrl = 'https://www.example.com'; 69 70// 例1: プロキシを使用しない場合 71echo "--- プロキシを使用しない場合の実行例 ---\n"; 72fetchUrlInfoWithProxySslVerifyResult($targetUrl); 73echo "\n"; 74 75// 例2: プロキシを使用する場合(以下の行を有効にするには、実際のプロキシサーバーのアドレスに置き換えてください) 76// 例: $proxyAddress = 'http://your.proxy.server:8080'; 77// echo "--- プロキシを使用する場合の実行例 ---\n"; 78// fetchUrlInfoWithProxySslVerifyResult($targetUrl, $proxyAddress);
このPHPコードは、cURLライブラリを用いて指定されたURLから情報を取得し、プロキシ経由でのSSL検証結果とHTTPレスポンスコードを表示するサンプルです。システムエンジニアを目指す初心者が、ネットワーク通信の基本とcURL定数の使い方を学ぶことを目的としています。
fetchUrlInfoWithProxySslVerifyResult関数は、情報を取得したい$url(文字列)と、任意でプロキシサーバーのアドレス$proxy(文字列またはnull)を受け取ります。この関数はvoid型であり、特定の値を返さず、処理結果を直接出力します。
コードでは、まずcurl_init()で通信セッションを開始し、curl_setopt()でアクセス先のURLや、レスポンスを文字列として取得するなどの必要な設定を行います。プロキシが指定された場合は、その設定もここで行われます。次にcurl_exec()で実際にHTTPリクエストを実行し、その結果を取得します。
通信が成功した場合、curl_getinfo()関数とCURLINFO_RESPONSE_CODE定数を使って、WebサーバーからのHTTPレスポンスコード(例えば「200 OK」や「404 Not Found」など)を取得し表示します。さらに、CURLINFO_PROXY_SSL_VERIFYRESULT定数を用いて、プロキシサーバーのSSL証明書検証結果のエラーコードを取得します。この値は通常「0」となり、検証に問題がないことを意味します。「0」以外の値が返された場合は、OpenSSLのエラーコードに相当し、SSL検証が失敗したことを示します。最後にcurl_close()でセッションを終了し、関連リソースを解放します。このサンプルは、Webサービス連携や外部API利用時に役立つcURLの基礎的な利用方法を示しています。
このサンプルコードで利用するCURLINFO_PROXY_SSL_VERIFYRESULTは、プロキシ経由のSSL証明書検証結果を示します。通常は「0」が返されますが、「0」以外の値を確認するには、不正な証明書を持つプロキシサーバーなど特定の環境設定が必要となる点を理解してください。プロキシを使用する場合は、CURLOPT_PROXYオプションに実際に機能するプロキシサーバーのアドレスとポートを正しく指定する必要があります。指定がない場合や無効な場合は通信に失敗します。また、CURLINFO_RESPONSE_CODEはHTTPレスポンスコードを取得でき、通信が成功したかどうかの重要な指標となります。cURLセッション実行後は、curl_errno()でエラーがないか確認し、必ずcurl_close()でリソースを解放することが安全なコード運用の基本です。
PHP cURL HTTPステータスコードとSSL検証結果を取得する
1<?php 2 3/** 4 * cURL を使って指定されたURLから情報を取得し、HTTPステータスコードと 5 * プロキシSSL検証結果を表示するサンプル関数です。 6 * 7 * この関数は、システムエンジニアを目指す初心者が cURL ライブラリの 8 * 基本的な使い方と、curl_getinfo() で各種情報を取得する方法を学ぶのに役立ちます。 9 * 10 * @param string $url 情報を取得する対象のURL 11 */ 12function fetchUrlAndDisplayInfo(string $url): void 13{ 14 // 1. cURL セッションを初期化 15 $ch = curl_init(); 16 17 // cURL オプションを設定 18 // 2. 取得するURLを指定 19 curl_setopt($ch, CURLOPT_URL, $url); 20 // 3. 実行結果を文字列として返すように設定(trueの場合、echoで直接出力されず、curl_execの戻り値となる) 21 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 22 // 4. リダイレクトを自動的に追跡 23 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 24 // 5. SSL証明書の検証を有効にする (セキュリティのため推奨される設定) 25 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 26 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 27 28 // プロキシを使用する場合のオプション設定例(今回は使用しないのでコメントアウト) 29 // curl_setopt($ch, CURLOPT_PROXY, 'http://your_proxy_ip:port'); 30 // curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password'); 31 32 // 6. cURL リクエストを実行 33 $response = curl_exec($ch); 34 35 // リクエストが成功したかを確認 36 if ($response === false) { 37 // エラーが発生した場合、そのメッセージを表示 38 echo "cURL リクエストが失敗しました: " . curl_error($ch) . "\n"; 39 } else { 40 echo "--- URL: {$url} ---\n"; 41 42 // 7. curl_getinfo() を使用して HTTP ステータスコードを取得 43 // これはキーワード 'curlinfo_http_code' に関連する情報です。 44 $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 45 echo "HTTP ステータスコード (CURLINFO_HTTP_CODE): " . $httpStatusCode . "\n"; 46 47 // 8. curl_getinfo() を使用してプロキシのSSL検証結果を取得 48 // これはリファレンス情報 'CURLINFO_PROXY_SSL_VERIFYRESULT' に関連する情報です。 49 // プロキシを使用していない場合、この値は通常 '0' になります。 50 // '0' は検証が成功したことを意味します。 51 $proxySslVerifyResult = curl_getinfo($ch, CURLINFO_PROXY_SSL_VERIFYRESULT); 52 echo "プロキシSSL検証結果 (CURLINFO_PROXY_SSL_VERIFYRESULT): " . $proxySslVerifyResult . "\n"; 53 54 // 必要に応じて、取得したレスポンスの先頭部分を表示することもできます。 55 // echo "\n--- レスポンス内容の抜粋 ---\n"; 56 // echo mb_substr($response, 0, 200) . "...\n"; 57 } 58 59 // 9. cURL セッションを閉じる 60 curl_close($ch); 61 echo "\n"; // 区切りのための改行 62} 63 64// サンプル使用例 65echo "=== cURL 情報取得の開始 ===\n\n"; 66 67// 存在するURLの情報を取得 68fetchUrlAndDisplayInfo("https://www.example.com"); 69 70// 存在しない(または見つからない)URLの情報を取得して、HTTPステータスコードの違いを確認 71fetchUrlAndDisplayInfo("https://www.example.com/nonexistent-page-12345"); 72 73echo "=== cURL 情報取得の終了 ===\n"; 74 75?>
このPHPサンプルコードは、cURLライブラリを使って指定されたURLから情報を取得し、その結果としてHTTPステータスコードとプロキシSSL検証結果を表示する方法をシステムエンジニアを目指す初心者の方に説明します。
fetchUrlAndDisplayInfo関数は、引数として情報を取得したいURL(文字列型)を受け取ります。この関数はvoid型で定義されており、直接値を返しませんが、処理結果を画面に出力します。
関数内では、まずcurl_init()でcURLセッションを初期化し、curl_setopt()を使って取得対象のURLや結果を文字列として返す設定、リダイレクトの追跡、SSL証明書の検証など、必要なオプションを設定します。その後、curl_exec()で実際にウェブサーバーへリクエストを実行します。
リクエストが成功した後、curl_getinfo()関数を利用して様々な情報を取得します。キーワードにもあるCURLINFO_HTTP_CODEを引数に指定することで、ウェブサーバーからのHTTPステータスコード(例: 200は成功、404は見つからない)を取得できます。さらに、リファレンス情報に記載されたCURLINFO_PROXY_SSL_VERIFYRESULT定数を用いることで、プロキシ経由でのSSL証明書検証結果を得ることが可能です。この定数はPHP 8のcURL拡張機能の一部であり、通常0は検証成功を意味します。プロキシを使用していない場合でも、この定数で結果を確認することができます。最後に、curl_close()でcURLセッションを安全に閉じます。このサンプルを通じて、cURLの基本操作と情報取得の仕方を学ぶことができます。
CURLINFO_PROXY_SSL_VERIFYRESULTはプロキシ利用時のSSL検証結果を示し、通常0が成功を意味します。プロキシを使用しない場合でも、この値は0になることが多い点をご理解ください。セキュリティのため、CURLOPT_SSL_VERIFYPEERやCURLOPT_SSL_VERIFYHOSTでSSL証明書の検証を有効にすることは非常に重要です。curl_exec()の実行後は、必ず戻り値がfalseでないかを確認し、エラーハンドリングを丁寧に行ってください。また、通信終了後にはcurl_close()でcURLリソースを忘れずに解放することが大切です。CURLINFO_HTTP_CODEは通信の成功可否やサーバーの状態を判断する上で欠かせない情報ですので、この値の確認も怠らないようにしましょう。