¿Cómo envío una solicitud HTTP/2 POST en PHP?
curl push-notification (4)
Echa un vistazo a las imágenes de Apache y CLI PHP Docker que he creado para este propósito, que agregan soporte HTTP / 2 a la biblioteca acoplable oficial PHP 5.6. Esto elimina cualquier HTTP/2 client preface string missing or corrupt
errores HTTP/2 client preface string missing or corrupt
.
Una vez que tiene el entorno adecuado, después de haber probado varias bibliotecas JWS / JWT para PHP, solo encontré que Spomky-Labs/jose funciona perfectamente con los APN.
Encontré una pregunta similar en el envío de solicitudes HTTP / 2 POST en Ruby, pero quiero actualizar mi servidor con PHP
La nueva API HTTP / 2 basada en notificaciones push de Apple se describe aquí: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html
Cualquier persona con experiencia HTTP / 2 me ayuda a realizar una solicitud como cliente en PHP.
En el momento actual no hay soporte HTTP/2
directo en PHP.
Hay una idea para agregar dicho soporte en el futuro directamente a PHP: https://wiki.php.net/ideas/php6#http2_support
La biblioteca de terceros Guzzle https://github.com/guzzle/guzzle admite HTTP / 2, si están instaladas las versiones correctas de php y curl:
use GuzzleHttp/Client;
$client = new Client();
$client->get(''https://http2.akamai.com/demo/tile-0.png'', [
''version'' => 2.0,
''debug'' => true,
]);
La extensión CURL para PHP> = 5.5.24 tiene soporte para HTTP / 2. (ya que esta cometer )
También necesita tener instalado libcurl (la biblioteca subyacente que usan las funciones de enrollamiento) con el soporte HTTP / 2 habilitado. Eso significa un libcurl más nuevo que 7.38.0 pero en realidad, cuanto más nuevo, mejor. Libcurl debe haberse creado con soporte HTTP / 2 habilitado explícitamente, utilizando el indicador --with-nghttp2
en el momento de la compilación.
Simplemente use curl como lo usaría normalmente, y configure la opción CURLOPT_HTTP_VERSION
para usar HTTP / 2 pasando CURL_HTTP_VERSION_2_0
. Luego, la solicitud se actualizará a la versión 2 si el cliente y el servidor lo admiten.
Antes de PHP 5.5.24, si libcurl se ha creado con soporte HTTP / 2, puede pasar el valor int de CURL_HTTP_VERSION_2_0
explícitamente, ya que PHP aún lo pasará a libcurl. Actualmente, tiene un valor de 3
, esto no debería cambiar, pero podría .
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);
Tener PHP> = 5.5.24 no es suficiente para realizar una solicitud HTTP / 2 con curl, incluso si CURL_HTTP_VERSION_2_0 está definido. Recibirá un mensaje de error como el siguiente si intenta realizar una solicitud a APNS (Apple Push Notification Service):
?@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f616538666562613534
Como curl es un binding para libcurl, también debe tener curl con http / 2 habilitado.
Para obtener un código de muestra, vea mi answer a una pregunta similar aquí en SO
Para el procedimiento de instalación, puedes seguir este tutorial