Я нашел похожий вопрос на Отправка HTTP / 2 POST-запроса в Ruby
Но я хочу обновить свой сервер с помощью PHP
Новый API-интерфейс push-уведомлений Apple для HTTP / 2 описан здесь: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html
Любой, кто имеет опыт работы с HTTP / 2, поможет мне сделать запрос в качестве клиента на PHP.
Расширение CURL для PHP> = 5.5.24 имеет поддержку HTTP / 2. (поскольку этот коммит)
Вам также нужно установить libcurl — базовую библиотеку, которую используют функции curl — с включенной поддержкой HTTP / 2. Это означает, что libcurl новее, чем 7.38.0, но на самом деле, чем новее, тем лучше. Libcurl должен быть построен с явно включенной поддержкой HTTP / 2, используя --with-nghttp2
флаг во время компиляции.
Просто используйте curl, как обычно, и установите CURLOPT_HTTP_VERSION
возможность использовать HTTP / 2, передавая CURL_HTTP_VERSION_2_0
, Тогда вы получите запрос обновлен до версии 2 если клиент и сервер оба поддерживают это.
До PHP 5.5.24, если libcurl был собран с поддержкой HTTP / 2, вы можете передать значение int CURL_HTTP_VERSION_2_0
в явном виде, так как PHP все равно будет передавать его в libcurl. В настоящее время оно имеет значение 3
— это не должно измениться, но мог.
if (!defined('CURL_HTTP_VERSION_2_0')) {
define('CURL_HTTP_VERSION_2_0', 3);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
Наличие PHP> = 5.5.24 недостаточно для выполнения HTTP / 2-запроса с curl, даже если определено CURL_HTTP_VERSION_2_0. При попытке сделать запрос к APNS (Apple Push Notification Service) вы получите сообщение об ошибке, подобное следующему:
?@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f616538666562613534
Так как локон переплет для libcurl вы также должны включить curl с включенным http / 2.
Для примера кода см. Мой ответ на подобный вопрос здесь на SO
Для процедуры установки, вы можете следовать этому руководство
На данный момент нет прямого HTTP/2
поддержка в PHP.
Есть идея добавить такую поддержку в будущем прямо в PHP:
https://wiki.php.net/ideas/php6#http2_support
Библиотека стороннего производителя https://github.com/guzzle/guzzle поддерживает HTTP / 2, если установлены правильные версии php и curl:
use GuzzleHttp\Client;
$client = new Client();
$client->get('https://http2.akamai.com/demo/tile-0.png', [
'version' => 2.0,
'debug' => true,
]);
Проверьте апаш а также CLI Изображения PHP Docker, которые я создал для этой цели, добавляют поддержку HTTP / 2 к официальной библиотеке докеров PHP 5.6. Это избавляет от любого HTTP/2 client preface string missing or corrupt
ошибки.
После того, как вы получили правильную среду, попробовав несколько библиотек JWS / JWT для PHP, я нашел только Spomky-Labs / хосе отлично работать с APNs.