4

My problem statement is similar to the one mentioned here , except that the request type I need server to respond to is HTTP/2. I am opening a telnet connection through a PHP script and sending a request:

<?php
    $fp = fsockopen("10.20.0.120", 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "GET /mng/1000.txt HTTP/2 \r\n";
        $out .= "Host: 10.20.0.120\r\n";
        $out .= "Connection: Close\r\n";    
        fwrite($fp, $out);
        $out = "\r\n";
        $out .= "\r\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }    
        fclose($fp);
    }
?>

I am aware that in case of HTTP/2 the header frame must be in binary format, hence I need to know if I could do it using PHP. I tried with PHPs pack method, but it didn't work. When I execute the above script, this is the output it gives:

Client(root)#php above_file.php
HTTP/1.1 400 Bad Request
Content-Length: 0

...and when the request is of type HTTP/1.1 (and executed on another setup replacing HTTP/2 with HTTP/1.1), the output I receive is as expected:

Client(root)#php above_file.php
HTTP/1.1 200 OK
Date: Wed, 27 Sep 2017 11:31:57 GMT
Server: Apache/2.2.22 (Fedora)
Last-Modified: Wed, 20 Feb 2013 21:27:15 GMT
ETag: "a4f5b-3e8-4d62e9f40f9be"
Accept-Ranges: bytes
Content-Length: 12
Connection: close
Content-Type: text/plain; charset=UTF-8

Hello world!
Aseem Yadav
  • 728
  • 7
  • 15

0 Answers0