[英]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,
]);
查看我為此目的構建的Apache和CLI 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.