Моя постановка проблемы похожа на упомянутую Вот , за исключением того, что тип запроса, на который мне нужен сервер, — HTTP / 2.
Я открываю соединение telnet через скрипт PHP и отправляю запрос:
<?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);
}
?>
Я знаю, что в случае HTTP / 2 кадр заголовка должен быть в двоичном формате, поэтому мне нужно знать, смогу ли я сделать это с помощью PHP.
Я пробовал с PHP пак метод, но это не сработало. Когда я выполняю приведенный выше скрипт, это вывод, который он дает:
Client(root)#php above_file.php
HTTP/1.1 400 Bad Request
Content-Length: 0
…и когда запрос имеет тип HTTP / 1.1 (и выполняется на другой установке, заменяющей HTTP / 2 на HTTP / 1.1), вывод, который я получаю, является ожидаемым:
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!
Задача ещё не решена.
Других решений пока нет …