RECUPERER UNE PAGE SUR INTERNET

cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009 - 8 mai 2005 à 11:32
lapin-math Messages postés 2 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 28 novembre 2013 - 18 sept. 2013 à 23:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31265-recuperer-une-page-sur-internet

lapin-math Messages postés 2 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 28 novembre 2013
18 sept. 2013 à 23:50
C'est bien mais in peut faire mieux surtout que les hébergeurs n'autorisent pas l'ouverture de fichiers par le protocole HTTP. Ce que je dire, c'est l'ouverture de fichier que tu fais qui me dérange. À la place, je te conseille cURL, même si c'est un peut plus lourd que ton implépentation... Tu peux te renseigner sur l'utilisation de cette library qui est superbement cool (on peut faire des GET, POST, PUT et d'autres commandes HTTP exotique)

Sinon, ton script est bien mais l'ouverture par url n'est pas forcément autorisé
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
21 déc. 2005 à 14:53
$source=file_get_contents('monfichier');
$source_coupee = substr($source, strpos($source, "
"), 38) ;
echo $source_coupee;
cs_jonak Messages postés 4 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 janvier 2006
21 déc. 2005 à 13:03
Merci coucou747,

voila comment je fait :
$texte=file_get_contents('monfichier');
$source = $texte ;
$pos = strpos($source, "
") ;
$pos = ($pos +38) ;
$source_coupee = substr_replace($source, '', 0, $pos) ;
echo $source_coupee;

Malheureusement cela ne fonctionne pas. Le soucis viens du texte que je recherche qui contient des caratères inerpretté par PHP qui ferme la chaine avant la véritable fin :



Si je recherche que :
XbcProfileTableContainer

ca ne fonctionne pas quand même car il m'efface alors :
<div class="

Du coup cela coince quand je restitutue la variable avec le echo.

comment faire ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
21 déc. 2005 à 09:48
jonak, ma dèrnière source traite à peu près de ça : mise en page de sudoku...

$a=file_get_contents('monfichier');

le include est dangereux, car si l'autre page affiche du code php, alors ce code sera exécuté...
cs_jonak Messages postés 4 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 janvier 2006
21 déc. 2005 à 07:01
bonjour,

J'aimerai pouvoir stocker dans une variable le code source d'une page se trouvant sur un autre site afin de pouvoir utiliser une partie du code dans une page de mon site en dynamique.

Une fois récupéré dans la variable je sais faire le netoyage du code pour ne garder que la partie qui m'est utile et ainsi afficher une partie des informations du dit site.

Le but étant d'apporter l'information d'un site qui n'as pas de flux RSS et de faire des lien ensuite vers celui ci. D'ou le fait que je voudrais parser le code sources de la page en question.

Pouvez vous m'éclairer je m'y perd un peut dans vos codes.

d'avance merci
ozskry Messages postés 2 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 14 juillet 2005
14 juil. 2005 à 16:26
Mmmmh, d'accord, je connaissais substr() mais si je veux extraire un tableau perdu au milieu d'une page par ex, je fais comment ? Il faut que je connaisse le nb de caractère jusqu'à la table. Pas évident?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 juil. 2005 à 16:10
tu utilises substr...
ozskry Messages postés 2 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 14 juillet 2005
14 juil. 2005 à 12:37
Comment faire pour récupérer une partie précise du fichier distant ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 juin 2005 à 12:51
faut voir le code de la page qui t'identifie...
Roukof Messages postés 2 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 16 juin 2005
16 juin 2005 à 12:42
Merci à tous.

Donc en gros :

y a pas moyen de chopper ces pages dans un script php, même si j'ai un login et un mot de passe valables ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 juin 2005 à 12:25
renseignes toi sur les sessions et le protocol http...


Comment fait php pour savoir quel fichier de session assigner à un client ??? bah il lui poste un cookie quand il cré le fichier, c'est aussi simple que ça !
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
16 juin 2005 à 12:09
Coucou747,

a quoi sert la method POST ( je ne parlais qu'au niveau de l'identification )

Quant au cookies, j'ai pas trop ca pour la gestion des identifications ( pour ma part, les sessions sont gerées uniquement par le serveur, ou alors je suis pas au courant et j'aime pas ca)

Je prefere tout controler et eviter que quelqu'un bidouille mes fichiers de connexion.
(Le programmeur est un mec qui a tout pouvoir sur son programme, au dessus du patron ;), laisse moi mes reves ;) )

De toutes facons, je suis comme mon avatar, je n'aime les cookies que lorsqu'ils se mangent ;)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 juin 2005 à 11:52
entre nous, quand il y a session, il y a souvent cookies (ou passage de variables par get...)
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
16 juin 2005 à 11:36
Roukof,

Premierement, utilisé la method GET pour une identification est une grosse abérration (c'est le systeme le plus sur pour ce faire prendre son identitée)

De plus, une fois que tu es identifié, le site utilise surement un systeme de Session ou alors de cookies ( histoire d'etre encore moins sur).

En gros, si tu t'es identifié et que le cookies ou la variable de session est existante et OK alors tu peux naviguer.

Piquer une page avec ce systeme ( fopen) ne creer pas de cookies ni de sessions donc pour le site distant tu n'es pas identifié, donc tu obtiens la page d'erreur. (sinon a quoi sert l'identification)

J'espere avoir été clair.

Je ne crois pas que ce soit contournable et heureusement sinon très grosses failles de sécurité.
Roukof Messages postés 2 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 16 juin 2005
16 juin 2005 à 11:14
Hello,

Je suis programmateur amateur, pour mon loisir en php.
J'arrive à récupérer une page normale, mais je voudrais récupérer des pages sur un site qui nécessite un log-in et un mot de passe.

Lorsque je fais
$fich = "http://www.site.fr/home/index.php";
fopen ($fich,"r"), etc.

Je n'ai que la page d'erreur d'identification qui s'affiche (page style : "Attention login ou mot de passe incorrect !")

Pourtant, lorque je me log sur le site normalement, et qu'ensuite je change de suite, puis tappe l'adresse ci-dessus dans mon navigateur, à laquelle il faut normalement être loggé pour pouvoir accéder, ça marche, j'arrive sur le site tout loggé.

Mais mon script refuse de procéder avec la même facilité, on le rebute toujours sous prétexte qu'il n'est pas loggé.

J'ai essayé de contourner le pb en essayant de récupérer dans mon script php la page d'arrivée du formulaire d'identification qui permet d'entrer sur le site, qui, transcrie en GET, se présente comme suit :
http://www.site.fr/authent/index.php?log=mon_login&pwd=mon_pass
mais ça ne marche pas non plus, cela m'affiche toujours la page d'erreur d'identification. Pourtant lorsque je tappe l'adresse
http://www.site.fr/authent/index.php?log=mon_login&pwd=mon_pass
dans la barre d'adresses du navigateur ça marche, je me log ainsi, en GET.

Que dois-je mettre dans mon script pour que je puisse récupérer à volonté des pages de ce site qui recquiert un login et un mot de passe pour consulter ses pages, sachant que j'en ai !

Merci de votre aide !

Nicolas
Laurent00777 Messages postés 39 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 21 avril 2008
4 juin 2005 à 17:31
Ben moi, avec PHP5 (via WAMP)que j'ai récement installé, j'ai l'erreur suivante:

Warning: filesize() [function.filesize]: stat failed for http://www.google.ch/search?hl=fr&q=test&btnG=Rechercher&meta= in C:\monArborescence\...\monDossier\recuperer_page.php on line 9

Warning: fread() [function.fread]: Length parameter must be greater than 0. in C:\monArborescence\...\monDossier\recuperer_page.php on line 9

Je n'arrive pas à utiliser fopen pour une page web (par ex.: http://www.google.ch/search?hl=fr&q=test&btnG=Rechercher&meta=). Pareil, mes cookies et mes session PHP4 répondent plus avec PHP5...

ça vient d'où ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
20 mai 2005 à 18:05
ça n'utilises que deux fois plus de ram...
En théorie, le ram n'est pas super étendue, mais en pratique, on arrive aux 64 ko du dos seulement quand on manipule des images (sprites) et en php, on ne dépasse jamais les quelques mo de ram autorisés...

mes tests sont indéniables et rejoignent la théorie...
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
20 mai 2005 à 01:11
J'ai fais mes test sans charger un fichier au prélable je remplissait un tableau d'occurences, les premier test ont été fais sur un tableau au occurence croissante en taille : $tbl[0] = 0; $tbl[1000] = 1000; $tbl[1000000] = 1000000;

J'ai fais une deux série avec une valeur constante $tbl[0] = 'bonjour'; $tbl[1000000] = 'bonjour'; Les résultat différent quelques peu en observant que du coup du plus rapide au plus lent (mais très serrer) for() -> foreach() -> do while() -> while() -> implode()

Avec un texte encore plus long genre "ceci est une phrase très très très très longue qui va faire bien ramé mon pc" Les résultats sont similaire à avant.

Perso je préfère les boucles, je travail sur des bases de données qui dépasse le million d'enregistrement ou sur des catalogues produits avec des fichiers de plusieurs millier de ligne, quand je fait des extractions le fait d'avoir une boucle à un avantage indéniable le fait de " travailler à flux tendu " par exemple je reçois les echo au fur et à mesure avec un implode je recevrais tout d'un bloc, le serveur mettrait tout en ram et saturerait très vite. Ainsi ce n'est pas le cas. Il reste que le implode sur de petite structure est plus simple à coder et à relire ^^

PS : J'utilise pour chaque boucle des accolades (testé sur un athlon 1800+) J'ai fait qu'une série de test sinon j'en avais pour des heures ^^
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
19 mai 2005 à 22:03
avec un gros fichier :

temps d'exécution pour 10000 calculs
echo implode(file('exp_reg.html'));
6.09268498421
$a=file('exp_reg.html'); foreach ($a as $b){ echo $b; }
7.1317961216
$a=file('exp_reg.html'); foreach ($a as $b) echo $b;
7.10109400749

en fait, t'as raison pour les petits fichiers... car il n'y a pas bcp de tours de boucle, mais pour quelquechose de plus gros...


j'ai aussi un test qui est un peu plus représentatif des effets des acolades...
temps d'exécution pour 100 calculs
echo implode(file('exp_reg.html'));
0.0633730888367
$a=file('exp_reg.html'); foreach ($a as $b){ echo $b; }
0.0818321704865
$a=file('exp_reg.html'); foreach ($a as $b) echo $b;
0.0741288661957

100 calculs, c'est pas énorme, mais sinon, c'est carément lent... ces tests ont étés réalisés sur un céléron 2.4 ghtz, le fichier faisait 25311 octets 239 lignes...

En php, on manipule souvent des fichiers de plus de 200 lignes...

pour un fichier légèrement plus petit :
temps d'exécution pour 10000 calculs
echo implode(file('TESTS.php'));
1.23162293434
$a=file('TESTS.php'); foreach ($a as $b){ echo $b; }
1.48697495461
$a=file('TESTS.php'); foreach ($a as $b) echo $b;
1.48499512672

et pour un fichier de très petite taille :
temps d'exécution pour 10000 calculs
echo implode(file('1fo.php'));
0.861632823944
$a=file('1fo.php'); foreach ($a as $b){ echo $b; }
0.837021112442
$a=file('1fo.php'); foreach ($a as $b) echo $b;
0.827816963196

mais les diférences ne sont pas notables pour des fichiers de petites tailles, donc implode est préférable...
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
19 mai 2005 à 21:59
En poussant un peu la chose toujours sur 1 000 000 d'occurences

-- Implode()
time : 55.38

-- Foreach()
time : 20.46

-- For()
time : 19.98

-- While()
time : 19.77

-- Do While()
time : 20.14
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
19 mai 2005 à 21:16
Bien j'ai regardé sur 1 000 000 d'occurence dans un tableau voici les résultats :

-- Implode()
time : 71.19
-- Foreach()
time : 19.86

Foreach semble bien plus rapide. je demande aux autre si vous voulez bien testé vous même ça serais bien intéressant.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
19 mai 2005 à 20:16
implode car t'as pas de boucles et moins d'instructions exécutés...
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
19 mai 2005 à 20:12
Je ne sais pas lequel serait le plus rapide ?
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
19 mai 2005 à 19:16
Oui bien sur
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
19 mai 2005 à 18:22
un implode est mieux qu'un foreach
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
18 mai 2005 à 21:24
arf désolé pour le double postage
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
18 mai 2005 à 21:23
Fon code affichera : " array ".
file() renvoie un tableau ... array file ( string filename [, int use_include_path [, resource context]] )

$codehtml = file($url); // sans guillemet svp ^^

foreach($codehtml as $line) {
echo $line;
}

ceci serait mieux. ;)

Avec file() tu ne peux pas stopper la récupération de la source en plein milieu par exemple (une fois que tu as reçu les données que tu attendais, pour éviter de récupérer une fin de page qui de toute façon ne te servira pas) bref tu ne peut pas " accélérer ton script " ou l'optimiser si on veut.

Personne n'a encore parler des sockets ? un poil plus complexe mais c'est la solution ultime pour passer des formulaires, se loguer a distance, garder des sessions, cookies, https ... et pourquoi se limiter à ça ? ftp etc ^^ voir la librairie " curl " pour ceux qui ne veulent pas trop se prendre la tête avec les entetes html etc .. ^^
DarkM60 Messages postés 37 Date d'inscription dimanche 15 mai 2005 Statut Membre Dernière intervention 21 septembre 2009
18 mai 2005 à 20:05
$codehtml = file("$url");
echo $codehtml;

ça va un peu plus vite ^^

et pour afficher la source faut faire un html special chars ;)
Voili voilou
fyav Messages postés 124 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 12 février 2010
18 mai 2005 à 08:50
réponse question 1: pour ce qui est du post ou du get ou cookie, il n'y a pas de problème

réponse question 2:
la base de données a une mise à jour qui modifie d'environ 30% le total des données (adresses de fournisseurs), par an.
donc pour pomper la base il faut le faire tous les ans. Et avec des systèmes qui limite les requêtes en fonction de l'adresse ip, ou par le biais d'une vérification visuelle (style inscription à hotmail), il faut un être humain qui fasse les requêtes, je lui souhaites bonne chance, et le jeu n'en vaut pas la chandelle (coût ptohibitif par rapport aux données acquises).

réponse question 3:
je suis d'accord avec toi, sauf que mon concept est, comme celui de mixad, fournir des informations, et pour mes partenaires, ils n'ont rien à développer, juste à mettre 2 pages php où ils personnalisent le html, et c'est tout : pas de programmation, rien à faire.
Inscrit toi au système mixad et installe le sur un de tes sites, tu comprendras la simplicité de la chose pour les partenaires....
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
17 mai 2005 à 19:10
D'accord pour ton expliquation, mais tu es obligé de transposer en Get , si la page "monsite" nécessite une session et/ou des données en Post ça coince.

Pour ce qui est de la protection de ta base de donnée je suis un peu plus perplexe. Ton système sera l'interface entre une grosse base et ton client. Ton client au final il a les données donc des données de la base, petit à petit il peu au moins reconstruire avec ses résultat une partie de ta base.

Bref la comparaison avec XML, le principe est le même, on récupère un fichier que l'on peux parser, transformer etc ... tant qu'il y a des données dans le fichier. Justement xml à été conçu pour ceci : Faire de xml un moyen homogène de transport de donnée pour tout type d'interface. C'est un moyen adapté. avec SOAP par exemple pour monté un webservice par exemple.
Tu gagne en qualité de prestation de service !
Pour ton gagne pain que va tu dire à tes clients quand faudra leur annoncé qu'il doivent créer un encodage php pour aller eux même chercher un fichier sur ton serveur ?
XML peut te permetre par exemple accoupler au XSL de monter des template pour eux etc ...
fyav Messages postés 124 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 12 février 2010
17 mai 2005 à 09:16
en fait je parle d'un système en marque blanche qui ne permet pas aux "partenaires" de pomper la base purement et simplement, je suis sur un projet de consultation d'une base sur plus de 50 critères de recherche. ça sera mon gagne pain, et je veux garder la maitrise (c'est à dire empécher le "pompage" pur et simple de ma base, en arretant tout internaute (y compris les moteurs de recherche) de faire des requetes.
je pense voir le principe xml: tu cré un catalogue static que tes partenaires font des requêtes dessus, dis moi si je me trompe ?

pour ce qui est de récupérer la page de résultat: en fait, tous les liens qui sont sur la page récupérée vont sur la même page du partenaaire avec des gets ou des posts + l'addresse de la page à ouvrir, un petit exemple:
www.partenaire.com/recup.php:
<?php
$numpartenaire=001;//c'est le numéro d'identification du partenaire
//là c'est le début d'url de mon site
$url='http://www.monsite.com/recherche.php?numpartenaire='.$numpartenaire.'&';
//ici on récupère tout ce qui a été envoyé en post, get et cookie
//afin de le renvoyer à mon url pour traitement
foreach($_REQUEST as $key=>$elem) {$url.=$key.'='.urlencode($elem).'&';}
include($url);
?>

et dans www.monsite.com/recherche.php, toutes les url auront la forme de :
www.partenaire.com/recup.php?.............etc.........

ça permet à l'internaute de n'y voir que du feu étant donné qu'il reste sur la même page
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
16 mai 2005 à 19:37
FYAV aujourd'hui ce type de technique est totalement obslète, une boutique en marque blanche envoie tout sont catalogue en xml. c'est plus simple, maniable, et on garde les même avantages. exemple : Florajet, kelkoo, msn et zdnet etc ^_^

Sinon gardons ce principe puisque c'est le sujet, le dit "site en marque blanche" aspire donc une page avec un formulaire, l'utilisateur rempli et post ce formulaire. Comment tu récupère la page de résultat ?

(j'ai la solution) à vous de réfléchir.
Steph666 Messages postés 74 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 5 juin 2008
10 mai 2005 à 10:40
Salut,

sinon y a aussi

$contenu = file_get_contents("http://www.serveur.com/index.html");
fyav Messages postés 124 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 12 février 2010
9 mai 2005 à 12:56
en fait cela peut servir pour de la "marque blanche"
c'est d'ailleurs le principe utilisé par le réseau de petites annonces en marque blanche :Mixad
cela permet pour le fournisseur de contenu (ex: mixad) de rester maître de sa base de donnée et de l'affichage
et pour celui qui l'utilise en marque blanche (tiscali, le neuf, M6, les Echos, etc....) d'avoir un service qui reste sur son site avec une personnalisation pratiquement totale.....
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
8 mai 2005 à 16:07
Oui bien évidemment...
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
8 mai 2005 à 13:59
Faut préciser dans les commentaire que le but est de pouvoir modifier la page importée si on le souhaite.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 mai 2005 à 13:05
sinon, t'as
echo implode(file($filename));
qui est moins rapide qu'include, mais qui pourrait permetre de récupérer ça dans une variable...

enfin pour moi ça ressemble plus à un hello world qu'a une page...

une source comme ça, on peut en faire des dizaines en une journée, imagines l'état de la bdd de phpcs si on postait tous des sources comme ça.... çz ne mérite pas initié, juste débutant...
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
8 mai 2005 à 12:52
oui bien sur mais c'est un bon moyen pour pouvoir modifier l'"include"...
sinon tu as raison, l'include c'est plus simple...
G_____
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
8 mai 2005 à 11:32
La même chose en 1 ligne;

include "http://www.monsite.com" ;

mais cependant ton source peut etre intéressant pour montrer la lecture de fichier (cela dit, sans grand intérêt non plus)
Rejoignez-nous