Intereting Posts
Selenium2 firefox: используйте профиль по умолчанию Должен ли я использовать ассоциативный массив или объект? substr_count и массив как игла php асинхронный вызов и получение ответа от фонового задания Профиль медленных страниц PHP в производстве Paypal выражает «краткое описание заказа» выполнить строку кода PHP в командной строке Преобразование массива в массив в строку возможно ..? Производительность массива PHP как обрабатывать ошибку синтаксического анализа для функции eval в php Можно ли разместить глистов-бутстрапов внутри {{Form :: submit ('')}} – Laravel Зачем нам нужно кодировать изображения base64 перед передачей? Получение «отчетов FTP-сервера 550 Не удалось получить размер файла». При использовании FTP-URL в fopen mongo.so:> undefined symbol: php_json_encode в Unknown on line 0. После установки mongo драйвер для php Как издеваться над тестированием веб-службы в PHPUnit через несколько тестов?

Как отправить HTTP / 2 POST-запрос в PHP

Я нашел аналогичный вопрос при отправке запроса HTTP / 2 POST в Ruby. Но я хочу обновить свой сервер с помощью PHP

Новый API-интерфейс, основанный на HTTP-объявлении Apple push-уведомления, описанный здесь: 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 

Поскольку curl является обязательным для libcurl, вы также должны иметь завиток с включенным http / 2.

Для примера кода см. Мой ответ на аналогичный вопрос здесь, на SO

Для процедуры установки вы можете следовать этому руководству

В настоящий момент в PHP нет прямой поддержки HTTP/2 .

Есть идея добавить такую ​​поддержку в будущем прямо к PHP: https://wiki.php.net/ideas/php6#http2_support

Третья партийная библиотека Guzzle https://github.com/guzzle/guzzle поддерживает HTTP / 2, если установлены правильная версия php и curl:

 use GuzzleHttp\Client; $client = new Client(); $client->get('http://img.ruphp.com/php/tile-0.png', [ 'version' => 2.0, 'debug' => true, ]); 

Ознакомьтесь с изображениями Apache и CLI PHP Docker, которые я создал для этой цели, которые добавляют поддержку HTTP / 2 официальной библиотеке докеров PHP 5.6. Это избавляет от любой HTTP/2 client preface string missing or corrupt ошибок.

Когда у вас есть правильная среда, попробовав несколько JWS / JWT-библиотек для PHP, я нашел Spomky-Labs / jose, чтобы отлично работать с APN.