2010-10-19 71 views
3

Hy全部。 我需要从单个域中获取多个页面的内容。 现在的每一页我使用的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,我不不知道为什么。

我试图使用:连接:保持活跃或HTTP/1.0,但在这种情况下,我没有从服务器获取任何东西(我的脚本的无限执行时间)。

有没有解决这个问题的建议?

谢谢!

回答

3

尝试仅发送最后一个请求中的Connection: Close标头。

编辑:澄清

$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); 
} 
+0

如果我只发送连接:关闭,如何将服务器知道我需要临屋page2.html进行检索? – 2010-10-19 18:04:03

+0

您仍然为每个页面发送所有其他标题,但只发送最后一页的“连接:关闭”。 – rojoca 2010-10-19 20:28:45

+0

无限的加载时间..在这种情况下.. 谢谢无论如何;) – 2010-10-20 13:55:03