Récupération d'une page web avec CURL

Résolu
Xeis -  
[Dal] Messages postés 6205 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,
<?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);
}
}
?>
A voir également:

3 réponses

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 224
 
'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">
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>
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
Location:
qui t'es renvoyé par le site, que tu peux obtenir avec
curl_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);
1
Xeis
 
Ce que je parle en résultat c'est cette ligne qui est écrite quand je passe par le navigateur :

6,326 résultats pour votre recherche en texte intégral.

Et dans mon script il me renvoie :

0 résultat pour votre recherche en texte intégral.

Alors que l'url spécifié est éxactement là même.

Merci,
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Sinon, tu devrait changer le User-agent de ta requête Curl, certains site bloque celui par Défaut.
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 224
 
J'ai suspecté ça aussi, mais cURL, sans config manuelle, prend l'UA du php.ini, qui sur certaines config (ex. PHP sur ArchLinux) n'est pas défini (donc je sais pas sur quoi il est paramétré).
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 106
 
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
0