Как отправить запрос HTTP / 2 POST в переполнение стека

Я нашел похожий вопрос на Отправка 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.

17

Решение

Расширение 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);
16

Другие решения

Наличие 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

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

6

На данный момент нет прямого 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,
]);
2

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

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

0
По вопросам рекламы [email protected]