php curl push-notification apple-push-notifications http2

¿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