Как отправить асинхронный запрос с помощью fsockopen на URL без пути - PullRequest
0 голосов
/ 25 мая 2019

Я использую fsockopen для выполнения асинхронного запроса к различным URL-адресам. Предположим, мне нужно сделать запрос к URL с таким форматом (с путем): POST http://www.example.com/v1. Этот пример кода работает хорошо.

$url = "www.example.com";
$path = "/v1";

$fp = fsockopen($url, 80, $errno, $errstr, 30);

if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "POST " . $path . " HTTP/1.1\r\n"; // 'POST /v1 HTTP/1.1'
    $out .= "Host: " . $url . "\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);

    // Read the body of the response just for testing purpose.
    $output = "";
    while ($line = fgets($fp)) {
        $output .= $line;
    }
    echo $output;

    fclose($fp);
}

Но у меня проблемы с отправкой запроса на URL без пути. Например: POST http://www.example.com.

Как вы можете себе представить, переменная $path имеет значение "", и первая строка запроса будет POST HTTP/1.1. В результате я не вижу никакого ответа.

Если я «форсирую» переменную $path со значением / (первая строка запроса будет POST / HTTP/1.1), я получу 301 в качестве ответа (не так, как ожидалось).

Есть предложения? Заранее спасибо!

...