Получение страницы с помощью fsockopen добавляет числа к возвращаемой строке - PullRequest
1 голос
/ 25 мая 2011

Это очень странно, на некоторых страницах он возвращает HTML нормально, на других он добавляет цифры в начало и конец возвращаемой строки ($out).

function lookupPage($page, $return = true) {
    $fp = fsockopen("127.0.0.1", 48580, $errno, $errstr, 5);        
    if (!$fp) {
        return false;
    }
    else {
        $out = "";
        $headers = "GET /" . $page . " HTTP/1.1\r\n";
        $headers .= "Host: www.site.com\r\n";
        $headers .= "Connection: Close\r\n\r\n";
        fwrite($fp, $headers);
        stream_set_timeout($fp, 300);
        $info = stream_get_meta_data($fp);
        while (!feof($fp) && !$info['timed_out'] && ($line = stream_get_line($fp, 1024)) !== false) {
            $info = stream_get_meta_data($fp);
            if ($return) $out .= $line;
        }
        fclose($fp);
        if (!$info['timed_out']) {
            if ($return) {
                $out = substr($out, strpos($out, "\r\n\r\n") + 4);
                return $out;
            }
            else {
                return true;
            }
        }
        else {
            return false;
        }
    }
}

например ..

3565
<html>
<head>
...
</html>
0

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Это называется Кодировка передачи по частям

Это часть протокола HTTP 1.1, и вы декодируете его HTTP 1.0.Вы можете просто проверить значения и обрезать их, если хотите.Они показывают только длину ответа, поэтому браузер знает, что он имеет полный ответ.

Также возможно посмотрите на file_get_contents

0 голосов
/ 25 мая 2011

Я полагаю, что сервер отвечает чанкованными данными.

Посмотрите на RFC2616 Кодировки передачи и его введение .

...