web-dev-qa-db-ja.com

HTTP / 2 POSTでリクエストをPHP

Sending HTTP/2 POST Rubyでのリクエスト で同様の質問を見つけましたが、PHPでサーバーを更新したいです

新しいAppleここで説明されているプッシュ通知HTTP/2ベースのAPI: https://developer.Apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ APNsProviderAPI.html

HTTP/2の経験がある人ならだれでも、PHPでクライアントとしてリクエストを行うのに役立ちます。

18
mthuong

PHP> = 5.5.24のCURL拡張は、HTTP/2をサポートしています。 ( このコミット

HTTP/2サポートを有効にして、libcurlをインストールする必要があります(curl関数が使用する基礎ライブラリ)。これは、7.38.0より新しいlibcurlを意味しますが、実際には、新しいほど良いです。 Libcurlは、コンパイル時に--with-nghttp2フラグを使用して、HTTP/2サポートを明示的に有効にして構築する必要があります。

通常使用するcurlを使用し、 CURLOPT_HTTP_VERSION オプションを設定して、CURL_HTTP_VERSION_2_0を渡してHTTP/2を使用します。次に、クライアントとサーバーの両方がそれをサポートしている場合、リクエストをバージョン2ifにアップグレードします。

PHP 5.5.24より前のバージョンでは、libcurlがHTTP/2サポート付きでビルドされている場合、PHPが引き続き渡すので、CURL_HTTP_VERSION_2_0のint値を明示的に渡すことができます。 libcurlまで。現在、それは3の値を持っています—これは変更すべきではありませんが、couldです。

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);
19
Daniel Stenberg

CURL_HTTP_VERSION_2_0が定義されていても、PHP> = 5.5.24はcurlを使用してHTTP/2リクエストを行うのに十分ではありません。 APNS(Apple Push Notification Service)へのリクエスト:

?@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f616538666562613534

Curlはlibcurlの binding であるため、http/2を有効にしたcurlも必要です。

サンプルコードについては、SOで同様の質問に対する answer を参照してください。

インストール手順については、これに従うことができます tutorial

6
tiempor3al

現在のところ、直接HTTP/2 PHPでのサポート。

将来的にPHPに直接このようなサポートを追加するideaがあります: https://wiki.php.net/ideas/ php6#http2_support

サードパーティライブラリGuzzle https://github.com/guzzle/guzzle は、正しいphpおよびcurlバージョンがインストールされている場合、HTTP/2をサポートします。

use GuzzleHttp\Client;

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

Apache および [〜#〜] cli [〜#〜] PHP HTTPを追加するこの目的のために作成したDockerイメージ/ 2公式のサポートPHP 5.6 Dockerライブラリ。これにより、HTTP/2 client preface string missing or corruptエラー。

適切な環境になったら、PHP私は Spomky-Labs/jose のみがAPNsで完全に動作することを発見しました。

0
Norbert