Imp Posté 15 Avril 2008 Posté 15 Avril 2008 (modifié) Bonjour J'ai besoin d'utiliser curl ou wget pour récupérer le contenu d'un page web dans une variable (à cause d'une histoire de cookie) Pour l'instant j'utilise ceci (qui fonctionne bien) : <?php$url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=682";$cookies="/tmp/cookies.txt";shell_exec('curl -D '.$cookies.' -L "'.$url.'"');$page=shell_exec('curl -s -b '.$cookies.' -L "'.$url.'"');?> Mais j'ai du mal à faire l'équivalent en code purement PHP (qui m'a l'air bien plus compliqué !!), sans passer par shell. http://fr.php.net/curl Est-ce que quelqu'un pourrait m'aider à le faire ? Sinon est-ce qu'il y a une réelle différence en terme de rapidité en passant par shell_exec ou ça n'a guère d'importance ? Merci d'avance Modifié 15 Avril 2008 par Imp
Kioob Posté 15 Avril 2008 Posté 15 Avril 2008 Bonjour, qu'est ce que tu n'arrives pas à faire avec la version PHP ? Le principe est sensiblement le même... une URL, des options, puis l'exécution. Pour ce qui est de la différence de performances, oui elle peut être importante... mais tout est relatif : si c'est pour un cron lancé une fois par heure, voir même toutes les minutes, tu ne verras très certainement pas la différence. D'autant plus que le goulet d'étranglement pour ce genre de traitement est bien souvent le site web en face. PS : dans ton exemple tu fais deux fois le "shell_exec", je suppose que c'est une erreur, non ?
Imp Posté 15 Avril 2008 Auteur Posté 15 Avril 2008 (modifié) PS : dans ton exemple tu fais deux fois le "shell_exec", je suppose que c'est une erreur, non ? Le premier sert à créer le fichier cookies.txt dont la deuxième commande à besoin pour que je récupère le bon contenu. -D/--dump-header <file> Write the protocol headers to the specified file. This option is handy to use when you want to store the headers that a HTTP site sends to you. Cookies from the headers could then be read in a second curl invoke by using the -b/--cookie option! The -c/--cookie-jar option is however a better way to store cookies. Mais c'est vrai que je pourrais faire la même chose en une fois : $page=shell_exec('curl -D '.$cookies.' -L "'.$url.'"; curl -s -b '.$cookies.' -L "'.$url.'"'); Le problème ? Bah je trouve ça compliqué. Déjà pour trouver les options vraiment équivalentes. L'option -b ne semble pas correspondre exactement à CURLOPT_COOKIEFILE , car avec le code suivant : <?php$url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=682";$cookies="/tmp/cookies.txt";$a = curl_init ($url);$header_file = fopen ($cookies, "w");curl_setopt ($a, CURLOPT_WRITEHEADER, $header_file);curl_setopt($a, CURLOPT_FOLLOWLOCATION, 1); curl_exec ($a);curl_close($a);$b = curl_init ($url);curl_setopt($b, CURLOPT_COOKIEFILE, $cookies);curl_setopt($b, CURLOPT_FOLLOWLOCATION, 1);$page = curl_exec($b);curl_close($b);?> le fichier cookies.txt (qui en fait contient les entêtes HTTP) est correct (identique qu'avec -D), mais apparemment ce n'est pas bien exploité comme avec -b car je n'obtiens pas le bon résultat (normalement le contenu de $page doit-être la page de la vidéo de stéphane Guillon, et quand ce n'est pas bon, c'est Thomas Ngijol) Je vais plutôt regarder du côté de cookie-jar... Modifié 15 Avril 2008 par Imp
Imp Posté 15 Avril 2008 Auteur Posté 15 Avril 2008 (modifié) Bon finalement je suis arrivé à avoir le bon résultat (et sans passer par un fichier) : <?php$c = curl_init($url);curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($c, CURLOPT_HEADER, 1);curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);$headers = curl_exec($c);curl_close($c);preg_match('/.*^Set-Cookie: ([^;]+)/sm',$headers,$cookie);$c = curl_init($url);curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);curl_setopt($c, CURLOPT_COOKIE, $cookie[1]);$page = curl_exec($c);curl_close($c); ?> Si je reprends le shell_exec avec une syntaxe condensée et en utilisant un tube au lieu d'un fichier, ça peut se résumer à ça : $page=shell_exec("curl -sLD - $url | curl -sb - $url"); Vu qu'il faut écrire dix fois plus de code en "pur" php, je crois que je vais en rester à shell_exec. Le but est de me fabriquer mes propres flux rss. Modifié 16 Avril 2008 par Imp
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant