繁体   English   中英

如何在PHP中发送HTTP / 2 POST请求

[英]How do I send a HTTP/2 POST request in PHP

在Ruby发送HTTP / 2 POST请求时发现了类似的问题,但我想用PHP更新服务器

此处描述了基于HTTP / 2的新Apple推送通知API: https : //developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html

具有HTTP / 2经验的任何人都可以帮助我以PHP的客户端身份进行请求。

PHP> = 5.5.24的CURL扩展支持HTTP / 2。 (由于此提交

您还需要安装libcurl(curl函数使用的基础库)并启用HTTP / 2支持。 这意味着libcurl比7.38.0更新,但实际上,更新越好。 必须在编译时使用--with-nghttp2标志,在显式启用HTTP / 2支持--with-nghttp2

只需CURL_HTTP_VERSION_2_0使用CURLOPT_HTTP_VERSION ,然后通过传入CURL_HTTP_VERSION_2_0来将CURLOPT_HTTP_VERSION选项设置为使用HTTP / 2。 然后, 如果客户端和服务器均支持该请求,则将请求升级到版本2。

在PHP 5.5.24之前,如果libcurl是使用HTTP / 2支持构建的,则可以显式传递CURL_HTTP_VERSION_2_0的int值,因为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不足以发出带有curl的HTTP / 2请求,即使已定义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的绑定 ,因此还必须启用curl并启用http / 2。

有关示例代码,请在此处查看我对类似问题的回答

有关安装过程,您可以按照本教程进行操作

当前,PHP中没有直接的HTTP/2支持。

有一个想法可以在将来直接向PHP添加这样的支持: https : //wiki.php.net/ideas/php6#http2_support

如果安装了正确的php和curl版本,则第三方库Guzzle https://github.com/guzzle/guzzle支持HTTP / 2:

use GuzzleHttp\Client;

$client = new Client();
$client->get('https://http2.akamai.com/demo/tile-0.png', [
    'version' => 2.0,
    'debug' => true,
]);

查看我为此目的构建的ApacheCLI PHP Docker映像,这些映像将HTTP / 2支持添加到了官方PHP 5.6 docker库中。 这消除了所有HTTP/2 client preface string missing or corrupt错误。

在拥有正确的环境之后,尝试了多个PHP的JWS / JWT库后,我才发现Spomky-Labs / jose可与APN完美配合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM