簡體   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