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

发布于 2024-11-09 18:11:14 字数 1181 浏览 6 评论 0原文

这很奇怪,在某些页面上它会很好地返回 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

This is very strange, on some pages it will return the HTML fine, others it will add numbers to the beginning and end of the returned string ($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;
        }
    }
}

e.g...

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扶醉桌前 2024-11-16 18:11:14

它被称为 分块传输编码

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

也可以看看 file_get_contents

It is called Chunked Transfer Encoding

It is part of the HTTP 1.1 protocol and you're decoding it in a HTTP 1.0 way. You can just check for the values and trim them if you want. They only show the length of the response so the browser knows it has the complete response.

Also maybe look at file_get_contents

千と千尋 2024-11-16 18:11:14

我的猜测是服务器以分块数据响应。

看看RFC2616传输编码及其简介

My guess would be that the server responds with chunked data.

Have a look at RFC2616 Transfer codings and its introduction.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文