2016-05-10 22 views
4

PHPが他のサーバとHTTP2で接続するように強制する方法はありますか?PHPでHTTP/2リクエストを作成する

$options = stream_context_create(array(
       'http' => array(
        'method' => 'GET', 
        'timeout' => 5, 
        'protocol_version' => 1.1 
       ) 
      )); 
$res = file_get_contents($url, false, $options); 
var_dump($http_response_header); 

をと試してみました:

私が試した

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, 3); 
$response = curl_exec($ch); 
var_dump($response); 
curl_close($ch); 

しかし、私はhttps://www.google.com/#q=apache+2.5+http%2F2

は、私は、次のURLを使用する場合は、両方の方法は私にHTTP1.1の応答を与えますHTTP/2 + SSL対応ドメインから要求を送信します。私は間違って何をしていますか?

+0

を?こちらをご覧くださいhttps://blog.cloudflare.com/tools-for-debugging-testing-and-using-http-2/ –

+0

あなたが試みました:[この回答](http://stackoverflow.com/questions/ 34606801/how-do-i-a-http-2-post-request-in-php) – Hexchaimen

+0

はHTTP/2をサポートするために作られたlibcurlバージョンですか? –

答えて

4

私の知る限り、cURLはHTTP 2.0をサポートするPHPの唯一の転送方法です。

あなたが最初のcURLのバージョンがそれをサポートできることをテストして、正しいバージョンのヘッダを設定する必要があります

:あなたが使用しているPHPのバージョン

if (curl_version()["features"] & CURL_VERSION_HTTP2 !== 0) { 
    $url = "https://www.google.com/"; 
    $ch = curl_init(); 
    curl_setopt_array($ch, [ 
     CURLOPT_URL   =>$url, 
     CURLOPT_HEADER   =>true, 
     CURLOPT_NOBODY   =>true, 
     CURLOPT_RETURNTRANSFER =>true, 
     CURLOPT_HTTP_VERSION =>CURL_HTTP_VERSION_2_0, 
    ]); 
    $response = curl_exec($ch); 
    if ($response !== false && strpos($response, "HTTP/2.0") === 0) { 
     echo "HTTP/2 support!"; 
    } elseif ($response !== false) { 
     echo "No HTTP/2 support on server."; 
    } else { 
     echo curl_error($ch); 
    } 
    curl_close($ch); 
} else { 
    echo "No HTTP/2 support on client."; 
} 
+0

プラットフォーム/バージョンに応じて、私と同じようにいくつかの調整が必要になることがあります:[https://stackoverflow.com/a/45110402/1005334] – kasimir

+0

「curl --http2 -I https:// nghttp2.org/'はHTTP2モードで動作しますが、PHPに切り替えると代わりにHTTP 1.1として送信されますか?あなたのコードをテストしましたが、HTTP2モードではまだ動作しません。私はPHP 5.6とカール7.54を持っています。 – andreszs

+0

@Andrewコマンドラインで使用しているカールは、カールをサポートするためにPHPに準拠している必要はありません。 – miken32

関連する問題