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

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

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

作成日: 更新日:

基本的な使い方

CURLOPT_HTTP_VERSION定数は、PHPのcURL拡張機能において、HTTP通信で使用するプロトコルバージョンを指定するための定数です。PHPのcURL拡張機能は、ウェブサーバーへのリクエスト送信や、外部のAPIとの連携など、様々なネットワーク通信を行う際に利用される強力なライブラリです。この定数を用いることで、HTTP/1.0、HTTP/1.1、HTTP/2といった、クライアントがサーバーと通信する際の具体的なHTTPプロトコルバージョンを明示的に指定することができます。

例えば、curl_setopt()関数にこの定数を渡すことで、特定のHTTPバージョンでの通信をcURLに指示します。具体的には、CURL_HTTP_VERSION_1_1を指定すればHTTP/1.1、CURL_HTTP_VERSION_2を指定すればHTTP/2での通信を試みるようになります。この設定は、通信相手のサーバーが特定のHTTPバージョンにしか対応していない場合や、HTTP/2のような新しいプロトコルの持つパフォーマンス上のメリットを積極的に活用したい場合に重要です。通常、このオプションが設定されていない場合、cURLライブラリはサーバーとの互換性を考慮し、最適なHTTPバージョンを自動的に選択します。しかし、特定の要件やデバッグ目的で明示的にバージョンを制御する必要がある場合に、この定数が利用されます。

構文(syntax)

1<?php
2$ch = curl_init();
3curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
4curl_close($ch);

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP cURLでHTTPバージョンを指定してリクエストする

1<?php
2
3/**
4 * 指定されたHTTPバージョンでcURLリクエストを実行します。
5 * システムエンジニアを目指す初心者向けに、CURLOPT_HTTP_VERSIONの基本的な使い方を示します。
6 *
7 * @param string $url リクエストを送信するURL。
8 * @param int $httpVersion 使用するHTTPバージョン定数 (例: CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0)。
9 * @return string リクエストの結果、またはエラーメッセージ。
10 */
11function performCurlRequestWithHttpVersion(string $url, int $httpVersion): string
12{
13    // cURLセッションを初期化します。
14    $ch = curl_init();
15
16    if ($ch === false) {
17        return "cURLの初期化に失敗しました。";
18    }
19
20    // リクエスト対象のURLを設定します。
21    curl_setopt($ch, CURLOPT_URL, $url);
22
23    // 戻り値を文字列として取得するように設定します。
24    // これをtrueにすると、curl_exec()が成功時に結果を文字列で返します。
25    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
26
27    // ここで CURLOPT_HTTP_VERSION を設定します。
28    // これにより、cURLが指定されたHTTPプロトコルバージョンを使用してリクエストを送信します。
29    //
30    // 主な値:
31    // - CURL_HTTP_VERSION_1_0: HTTP/1.0 を使用します。
32    // - CURL_HTTP_VERSION_1_1: HTTP/1.1 を使用します (最も一般的です)。
33    // - CURL_HTTP_VERSION_2_0: HTTP/2 を使用します (サーバーが対応している場合)。
34    // - CURL_HTTP_VERSION_NONE: cURLに最適なバージョンを選択させます (デフォルト動作)。
35    curl_setopt($ch, CURLOPT_HTTP_VERSION, $httpVersion);
36
37    // cURLリクエストを実行し、結果を取得します。
38    $response = curl_exec($ch);
39
40    // エラーが発生した場合は、エラーメッセージを返します。
41    if (curl_errno($ch)) {
42        $errorMsg = curl_error($ch);
43        curl_close($ch); // エラー時でもセッションを閉じます。
44        return "cURLエラー: " . $errorMsg;
45    }
46
47    // cURLセッションを閉じ、リソースを解放します。
48    curl_close($ch);
49
50    return $response;
51}
52
53// --- サンプルコードの実行例 ---
54
55// テスト用のURLを設定 (HTTP/1.1をサポートする一般的なサイト)
56$urlToTest = "http://example.com";
57// CURL_HTTP_VERSION_1_1 を使用してHTTP/1.1プロトコルを指定
58$httpVersionToUse = CURL_HTTP_VERSION_1_1;
59
60echo "{$urlToTest} に HTTP/1.1 を使用してリクエストを送信中...\n";
61
62// 関数を呼び出し、結果を取得
63$result = performCurlRequestWithHttpVersion($urlToTest, $httpVersionToUse);
64
65// 結果を表示
66if (strpos($result, "cURLエラー") === 0) {
67    echo $result . "\n";
68} else {
69    echo "成功!レスポンスの最初の500文字:\n";
70    // 取得したレスポンスが長すぎる場合を考慮し、最初の部分のみ表示します。
71    echo substr($result, 0, 500) . "...\n";
72}
73
74// 参考: HTTP/2を試す場合 (対応するURLと適切なSSL/TLS設定が必要です)
75// $urlToTestHttp2 = "https://www.google.com"; // HTTP/2対応サイトの例
76// $httpVersionToUseHttp2 = CURL_HTTP_VERSION_2_0; // HTTP/2 を指定
77//
78// echo "\n{$urlToTestHttp2} に HTTP/2 を使用してリクエストを送信中...\n";
79// $resultHttp2 = performCurlRequestWithHttpVersion($urlToTestHttp2, $httpVersionToUseHttp2);
80// if (strpos($resultHttp2, "cURLエラー") === 0) {
81//     echo $resultHttp2 . "\n";
82// } else {
83//     echo "成功!HTTP/2 レスポンスの最初の500文字:\n";
84//     echo substr($resultHttp2, 0, 500) . "...\n";
85// }

このPHPのサンプルコードは、CURLOPT_HTTP_VERSIONオプションを利用して、HTTPリクエストで使用するプロトコルバージョンを明示的に指定する方法をシステムエンジニアを目指す初心者にも分かりやすく説明しています。

performCurlRequestWithHttpVersion関数は、引数として指定された$url(リクエストを送信するURL)と$httpVersion(使用するHTTPバージョン定数)を受け取り、cURLリクエストを実行します。関数内では、まずcurl_init()でcURLセッションを初期化し、CURLOPT_URLでリクエスト対象のURLを設定します。CURLOPT_RETURNTRANSFERオプションをtrueに設定することで、リクエストの実行結果を文字列として取得できるようにしています。

最も重要な部分として、CURLOPT_HTTP_VERSIONオプションを設定します。ここでは$httpVersion引数で渡された定数(例: CURL_HTTP_VERSION_1_1はHTTP/1.1、CURL_HTTP_VERSION_2_0はHTTP/2)を指定し、cURLがそのHTTPプロトコルバージョンを使ってサーバーと通信するように指示します。CURL_HTTP_VERSION_NONEを指定すると、cURLが最適なバージョンを自動で選択します。

設定後、curl_exec()でcURLリクエストを実行し、その結果を取得します。リクエスト中にエラーが発生した場合はcurl_errno()で検出し、エラーメッセージを返します。成功した場合は、サーバーからのレスポンス内容が文字列として関数の戻り値になります。最後にcurl_close()でセッションを閉じ、リソースを適切に解放しています。この一連の処理により、HTTPプロトコルバージョンを細かく制御したウェブ通信が可能です。

CURLOPT_HTTP_VERSIONは、cURLがHTTPリクエストを送信する際のプロトコルバージョンを指定するオプションです。設定するバージョンは、通信相手のサーバーが対応している必要があります。特にHTTP/2.0を使用する際は、多くの場合HTTPS接続が前提となり、サーバー側の対応確認が重要です。バージョン指定にはCURL_HTTP_VERSION_1_1のような定義済み定数を使い、直接数値を指定しないようにしましょう。cURL処理では、curl_initの初期化成否、curl_exec後のcurl_errnocurl_errorによるエラー判定、そして必ずcurl_closeでリソースを解放することが不可欠です。これらにより、安定した安全なプログラム動作が確保できます。

関連コンテンツ