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

Новый API-интерфейс Apple push-уведомлений на основе HTTP / 2, описанный здесь: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html

Любой, кто имеет опыт работы с HTTP / 2, поможет мне сделать запрос в качестве клиента на PHP.

19
mthuong 5 Янв 2016 в 11:04

4 ответа

Лучший ответ

Расширение 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);
21
Daniel Stenberg 10 Фев 2016 в 22:17

В настоящий момент в 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('https://http2.akamai.com/demo/tile-0.png', [
    'version' => 2.0,
    'debug' => true,
]);
2
Gennadiy Litvinyuk 5 Янв 2016 в 08:47

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

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

0
Norbert 1 Янв 2017 в 15:47