fsock: невозможно найти транспортный сокет "http" - PullRequest
3 голосов
/ 01 апреля 2012

я хочу отправить переменные сообщения с помощью fsock, но когда я попробую это:

$post_arr = array ("a" => "b");
    $addr = 'http://1.2.3.4/confirmation.html';

    $fp = fsockopen($addr, 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {

        $req = '';
        foreach ($post_arr as $key => $value) {
            $value = urlencode(stripslashes($value));
            $req .= "&" . $key . "=" . $value;
        }


        $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
        fwrite($fp, $header);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }

Я получаю «Невозможно найти транспортный сокет« http »», есть идеи почему?

1 Ответ

7 голосов
/ 01 апреля 2012

fsockopen() открывает сокет. Сокеты ничего не знают о протоколах Layer5 +, таких как HTTP.

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

Чтобы запросить определенный путь, отправьте его в запросе: GET /confirmation.html
Чтобы указать домен, отправьте его в заголовке Host: Host: 1.2.3.4


Возможно, вы захотите использовать расширение curl. Обычно нет веской причины для создания HTTP-запросов вручную в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...