PHP 8.4: Curl: Новые константы CURL_HTTP_VERSION_3 и CURL_HTTP_VERSION_3ONLY для поддержки HTTP/3
CURL_HTTP_VERSION_3 и CURL_HTTP_VERSION_3ONLY для поддержки HTTP/3Расширение PHP Curl способно выполнять HTTP/3 (также известный как QUIC) HTTP-запросы, если расширение Curl скомпилировано с зависимостями, необходимыми для HTTP/3.
Для расширения Curl в PHP 8.4 требуется libcurl 7.61.0 или более поздняя версия. Для поддержки HTTP/3 Curl требуется libcurl 7.66.0 или более поздняя версия.
Начиная с версии PHP 8.2 и выше, можно включить поддержку HTTP/3, передав корректные параметры в опцию Curl CURLOPT_HTTP_VERSION.
В PHP 8.4 расширение Curl объявляет две новые PHP константы, являющиеся параметрами для опции Curl CURLOPT_HTTP_VERSION.
CURL_HTTP_VERSION_3(значениеint 30)CURL_HTTP_VERSION_3ONLY(значениеint 31)
$ch = curl_init("https://php.watch/");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_3);
curl_exec($ch);Если расширение Curl не собрано с поддержкой HTTP/3, вызов curl_setopt возвращает false, а опция CURLOPT_HTTP_VERSION остаётся значением по умолчанию или существующим значением, если оно было установлено ранее.
CURL_HTTP_VERSION_3
Когда опция Curl CURLOPT_HTTP_VERSION установлена в CURL_HTTP_VERSION_3, Curl попытается использовать HTTP/3 для запроса, но в случае неудачи вернётся к более ранним версиям HTTP. Это типичный и желательный способ включения HTTP/3, так как он использует оппортунистический подход к включению HTTP/3.
Константе CURL_HTTP_VERSION_3 присвоено значение int 30.
CURL_HTTP_VERSION_3ONLY
Если для опции Curl CURLOPT_HTTP_VERSION установлено значение CURL_HTTP_VERSION_3ONLY, Curl будет пытаться использовать HTTP/3, но отклонит запрос, если хост не поддерживает HTTP/3.
Константе CURL_HTTP_VERSION_3ONLY присвоено значение int 31.
Влияние на обратную совместимость
CURL_HTTP_VERSION_3 и CURL_HTTP_VERSION_3ONLY — две новые PHP константы, объявленные в глобальном пространстве имён. Если пользовательское PHP-приложение не объявит идентичные константы, это изменение не вызовет проблем с обратной совместимостью.
В PHP 8.2 и более поздних версиях можно использовать тривиальный полифилл этих двух новых констант. Хотя это и не рекомендуется, можно также включить поддержку HTTP/3, передав напрямую целочисленные значения этих констант.
if (curl_version()['version'] >= 0x075800) {
define('CURL_HTTP_VERSION_3', 30);
define('CURL_HTTP_VERSION_3ONLY', 31);
}