使用fsockopen检索页面会在返回的字符串中添加数字



这很奇怪,在某些页面上它会返回HTML fine,而在其他页面上它则会在返回字符串($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.1rn";
        $headers .= "Host: www.site.comrn";
        $headers .= "Connection: Closernrn";
        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, "rnrn") + 4);
                return $out;
            }
            else {
                return true;
            }
        }
        else {
            return false;
        }
    }
}

例如

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

它被称为分块传输编码

它是HTTP1.1协议的一部分,您正在以HTTP1.0的方式对其进行解码。您可以检查这些值,并根据需要对其进行修剪。它们只显示响应的长度,这样浏览器就知道它有完整的响应。

也可以查看file_get_contents

我的猜测是服务器会用分块数据进行响应。

看看RFC2616传输编码及其介绍。

相关内容

  • 没有找到相关文章

最新更新