2010-10-19 6 views
3

Hy all. J'ai besoin d'obtenir le contenu de plusieurs pages à partir d'un seul domaine. Maintenant, pour chaque page que j'utiliser une connexion fsockopen, et je reçois le contenu de la page de cette façon:Obtenir plusieurs pages avec un seul 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); 
} 

>

Mes déchets de script temps, avec reconnectant au domaine, pour obtenir la deuxième page. Je me demandais s'il est possible d'utiliser une seule connexion, et d'obtenir plusieurs pages, comme ceci:

<?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); 
} 

>

Mais cette méthode renvoie le page1.html deux fois, je ne Je ne sais pas pourquoi.

J'ai essayé d'utiliser: Connection: keep alive, ou HTTP/1.0, mais dans ce cas je n'ai rien reçu du serveur (temps d'exécution infini de mon script).

Une suggestion pour résoudre ce problème?

Merci!

Répondre

3

Essayez d'envoyer uniquement l'en-tête Connection: Close lors de la dernière demande.

EDIT: Précision

$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

Si j'envoie simplement la connexion: Fermer, comment connaître le serveur que j'ai besoin tha page2.html pour être récupéré? –

+0

Vous envoyez toujours tous les autres en-têtes pour chaque page mais n'envoyez que «Connection: Close» pour la dernière page. – rojoca

+0

Temps de chargement infini .. dans ce cas .. Merci quand même;) –

Questions connexes