2010-10-19 51 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

相關問題