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

Résolu/Fermé
Xeis - 24 juin 2014 à 11:15
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 24 juin 2014 à 15:05
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
24 juin 2014 à 11:32
'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
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 vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
24 juin 2014 à 13:03
Sinon, tu devrait changer le User-agent de ta requête Curl, certains site bloque celui par Défaut.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
24 juin 2014 à 14:44
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 24/06/2014 à 15:14
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