Récupération d'une page web avec CURL
Résolu
Xeis
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai fait une petit programme pour récupérérer tous le contenue d'une page web.
Je l'ai tester sur plusieurs site, avec certain cela fonctionne très bien mais avec d'autre c'est moin évident
exemple avec cette url :
http://www.has-sante.fr/...
C'est une adresse avec plein de résultat, malheuresement quand je lance mon fichier php avec CURL je me retrouve avec 0 résultat. Avez-vous une idée d'ou proviens le problème? Est-il simplement impossible de récupérer les résultats ici ? Car gérer en JS ou autre ?
Cordialement,
J'ai fait une petit programme pour récupérérer tous le contenue d'une page web.
Je l'ai tester sur plusieurs site, avec certain cela fonctionne très bien mais avec d'autre c'est moin évident
exemple avec cette url :
http://www.has-sante.fr/...
C'est une adresse avec plein de résultat, malheuresement quand je lance mon fichier php avec CURL je me retrouve avec 0 résultat. Avez-vous une idée d'ou proviens le problème? Est-il simplement impossible de récupérer les résultats ici ? Car gérer en JS ou autre ?
Cordialement,
<?php
$ch = curl_init();
$timeout = 0; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, "http://www.has-sante.fr/...");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
$lines = array();
$lines = explode("\n", $file_contents);
// display file line by line
foreach($lines as $line_num => $line)
{
if( htmlspecialchars($line) != "")
{
//echo "Line # {$line_num} : ".htmlspecialchars($line)."<br />\n";
$line = str_replace(" ","", $line);
file_put_contents("test.txt", $line."\n",FILE_APPEND);
}
}
?>
3 réponses
-
'lut, j'ai lancé le script sur la page d'accueil de has-sante.fr et j'ai eu ça:
Line # 0 : <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
Par "0 résultat", je ne sais pas ce que tu cherches et ce que tu appelles un "résultat", mais si tu te retrouves confronté au même résultat que moi, ça veut dire qu'il va falloir que tu implémentes la gestion des redirections HTTP avec l'en-tête
Line # 1 : <html><head>
Line # 2 : <title>302 Found</title>
Line # 3 : </head><body>
Line # 4 : <h1>Found</h1>
Line # 5 : <p>The document has moved <a href="http://www.has-sante.fr/">here</a>.</p>
Line # 6 : </body></html>Location:
qui t'es renvoyé par le site, que tu peux obtenir aveccurl_setopt($ch, CURLOPT_HEADER, true);
et$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($file_contents, 0, $header_size); $body = substr($file_contents, $header_size);
-
Sinon, tu devrait changer le User-agent de ta requête Curl, certains site bloque celui par Défaut.
-
Salut,
L'adresse en question renvoie plusieurs codes http 302 qui sont des codes de redirection "moved temporarily".
Pour faire que cURL suive les redirections proposées par le serveur, il faut ajouter cette option :
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
Dal