php - 使用单个 fsockopen 获取多个页面

标签 php fsockopen

大家好。 我需要从一个域中获取多个页面的内容。 现在,对于每个页面,我都使用 fsockopen 连接,并通过这种方式获取页面内容:

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET /page1.html HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        fgets($fp, 128);
    }
    fclose($fp);
}

?>

我的脚本浪费时间重新连接到域以获取第二页。 我想知道,是否可以使用单个连接并获取多个页面,如下所示:

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {

    $out = "GET /page1.html HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        fgets($fp, 128);
    } $out = "GET /page2.html HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        fgets($fp, 128);
    }
    fclose($fp);
}

?>

但是这个方法是两次返回page1.html,我不知道为什么。

我尝试使用:Connection: keep alive,或 HTTP/1.0,但在这种情况下我没有从服务器获得任何东西(我的脚本执行时间无限)。

有什么解决这个问题的建议吗?

谢谢!

最佳答案

尝试在最后一个请求中只发送 Connection: Close header 。

编辑:澄清

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

    $out = "GET /page1.html HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    // DON'T SEND Connection: Close HERE
    fwrite($fp, $out);
    while (!feof($fp)) {
        fgets($fp, 128);
    } 

    $out = "GET /page2.html HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    // THIS IS THE LAST PAGE REQUIRED SO SEND Connection: Close HEADER
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        fgets($fp, 128);
    }
    fclose($fp);
}

关于php - 使用单个 fsockopen 获取多个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3970515/

相关文章:

php - 使用fsockopen进行PHP GET和POST数据

php - 如何修复 fsockopen 错误?

php - 如何从终端或 phpmyadmin 导入大小为 150MB 的 .sql 文件

php - 避免内存限制在 MongoGridFSFile::getBytes PHP 中

php - 有没有办法让 git diff 显示方法名而不是类名?

php - 我需要通过代理,(从正在运行的 fsockopen 代码获取远程视频文件的大小)

php - Wordpress 导航 IE 9 及以下版本不适用于主页,但适用于其余页面

php - MySQL Sum(Total) 和 Sum(User) with ROLLUP

php - 如何让 SSL 在 fsockopen 中工作?

php - 使用 fgets/fread 从 fsockopen 读取数据挂起