IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Requêtes http Post à distance et affichage de la page


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 57
    Points
    57
    Par défaut Requêtes http Post à distance et affichage de la page
    Bonjour a tous,

    Je viens poster ici car je n'ai pas trouvé solution a mon problème et si le titre peut paraitre compliqué, en détail, c'est plus évident.

    Je travaille en local avec wamp server.

    Je suis en train de développer un petit parser html avec ce qui me va bien dedans. Jusque là tout marche bien. Cependant, pour certains site, nécessitant une connexion, le parsage reste celui de la page d'origine sans être logué.

    Je m'explique, j'ai une petite page php contenant ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    	if (isset($_POST['aa']))
    	{
    		echo 'AA</p>';
    	}
    	else
    	{
    		echo 'BB</p><form method="post", action="test.php">
    		<input type="text" name="aa" />
    		<input type="submit" value="BB" />
    		</form>
    		';
    	}
    	?>
    J'utilise donc dans un premier temps une de mes fonction pour me récupérer le contenu de la balise <p> qui me renvoie BB logiquement.
    Ensuite j'envoie ma donnée post.
    Enfin je re parse mais le résultat est le même : BB

    J'ai bien vérifié, les données POST sont envoyées et reçu.

    Voici ma fonction connecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function connecter()
    	{
    		$data = 'aa='.urlencode('aa');
     
    		$message  = 'POST '.$this->url.' HTTP/1.0\r\n';
    		$message .= 'Content-type: application/x-www-form-urlencoded\r\n';
    		$message .= 'Content-length: '.strlen( $data ).'\r\n';
    		$message .= '\r\n';
    		$message .= $data.'\r\n';
     
    		$fd = fsockopen('192.168.1.9', 80);
    		if (fputs($fd, $message))
    		{
    			echo 'OK';
    			$this->Parser($this->url);
     
    			// récupération et affichage du contenu de ma balise p
    			$resP = $this->rechercheBalise('2', $this->text, 'p');	
    			echo '+'.$resP[1][0].'+<br />';		
    		}
    		else
    			echo 'No';
    		fclose($fd);
    	}
    Avec $this->url contenant protocole + url (http://192.168.1.9/parser/test.php) sanchant que 192.168.1.9 est mon ip reseau.
    $this->Parser($this->url); stocke le contenu de la page dans un variable text (on le refait car la page est cencée avoir changé).
    $this->rechercheBalise('2', $this->text, 'p'); fonction permettant de récupérer toutes les balises <p> dans le champs text.

    J'ai bien OK qui s'affiche mais le text BB est aussi affiché.

    Je ne sais pas si cela vient du fait que je ne sois pas sur localhost mais si je change mon ip par localhost, la page charge sans s'arrêter.
    J'ai trouvé d'autres pistes notamment avec la class HttpRequest de php mais je preferais savoir avant si quelqu'un avait une idée.


    Merci

    DaX

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    Je pense que ton problème vient de la méthode rechercheBalise, il n'y à pas son corps, mais je ne comprend pas vraiment comment tu récupères le contenu de la page à l'intérieur de cette méthode

    En effet tu devrais à un moment donné faire un fopen($fd); pour lire la réponse, hors cette ressource ($fd), n'est pas passée en paramètre de rechercheBalise.

    A moins que tu ne le fasses dans Parser ?
    Auquel cas tu n'as pas correctement assimilé le fonctionnement de ces méthodes.
    Car la réponse de ta requête n'est disponible qu'en lisant le flux enregistré dans $fd (après le fputs hein), et non pas en faisant une lecture sur l'url avec un nouveau pointeur.

    bye

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 57
    Points
    57
    Par défaut
    ok je comprends mieux pourquoi cela ne marche pas !

    rechercheBalise est "independante" car elle va utiliser le champs text de la class.
    Il me faut utiliser l'id de resource retourné par $fd mais je ne sais pas comment l'exploiter. Il ne me reste plus qu'a le lire le fichier et stocker le contenu dans la variable text, et normalement, après, j'ai tout !

    Seulement lorsque j'utilise fgets() ou fgetss(), la page se met a charger à l'infini.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    	public function connecter()
    	{
    		$reponse 	= "";
     
    		$data 		= 'aa='.urlencode('aa');
     
    		$message  = "POST / HTTP/1.0\r\n";
    		$message .= "Host: www.google.fr\r\n";
    		$message .= "Content-type: application/x-www-form-urlencoded\r\n";
    		$message .= "Content-length: ".strlen( $data )."\r\n";
    		$message .= "\r\n";
    		$message .= $data."\r\n";
     
    		$fd = fsockopen('www.google.fr', 80, $errno, $errstr, 5);
     
    		if( $fd != false )
    		{
     
    			fputs($fd, $message);
     
    			while (!feof($fd))
    			{
    				$t = fgets($fd,512);
    		  		echo $t;
    				$reponse .= $t;
    			}
    			fclose($fd);
    		}
    		else
    		{
    			echo "erreur ".$errno." ".$errstr;
    		}
     
    		//$this->text = $reponse;
    		//$this->rechercheBalise('2', $this->text, 'p');
    	}
    En faits tu as fais un bug vicieux sans le savoir... En utilisant des simple quote "'", tes retours chariots n'étaient pas interprétés et lorsque tu envoyé la requête elle apparaissait avec des \r\n plein texte...

    Du coup je pense que tu moulinais parce que le serveur distant ne recevait pas demande cohérente et te faisait patienter jusqu'à réception, ce que ta requête ne pouvait faire. Donc sa chargeait. Et puis sa mourrait lamentablement dans un

    fatal error time exceeded.

    bye

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 57
    Points
    57
    Par défaut
    Merci beaucoup !

    Je ne pense pas que je l'aurais trouvée tout seul !!

    Juste une dernière chose maintenant , si l'envoie de données post provoquent la connexion et créent des variables session, j'arrive a récupérer ce qu'il faut sur la page donc elle a bien été mise a jour, cependant, au moment de parser une autre page (que ce soit en créant un nouvel objet ou en modifiant l'url, les données de session sont perdues.

    Y a t'il un moyen de les conserver et ainsi grâce à une unique connexion, on a accès a tout ce que l'on veut ou doit on se reconnecter pour chaque page ?

    Merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Hm, je pense qu'il faut que tu envoies le session id. Soit par cookies, soit par l'url, cela dépend de ta configuration. cf session_name et session_id

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 57
    Points
    57
    Par défaut
    Le retour de fgets contient le cookie contenant l'id de session donc j'en conclue que la session a bien été créée !

    Grace a cela je fais la lecture du cookie que je stocke dans mon objet.

    Cependant sur mon site, lorsqu'un membre a le droit ou pas d'aller je teste si la session existe car un fois connecté, la plus part des variables de session se créent. Je ne passe ni par l'url ni par des cookies pour tester la session mais en faisant : if(isset($_SESSION['id'])) ...
    peut être en envoyant des requêtes post mais j'en doute.

    Je ne vois pas comment faire a ce niveau.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Muep, mais quand tu postes, tu n'envoies pas l'id de session, donc php perd ta session, même si le sessid est le même au retour.
    Essaie de le passer dans l'url pour faire simple.

    Du moins c'est ce que j'imagines.

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 57
    Points
    57
    Par défaut
    Je n'arrive pas a voir comment tu veux que je le passe en paramètre :S

    'http://monsite.fr?session_id='.$sessionId;

    En fait sur mon site, l'identification renvoie sur la page index.php et la page messagerie.php par exemple qui n'a le contenu accessible que si il existe une session.

    Je viens de faire des tests et que je sois connecté ou pas, le cookie PHPSESSID se crée tout seul. mais si je le supprime une fois connecté, je me retrouve déconnecté.

Discussions similaires

  1. Requête HTTP - POST avec socket
    Par kalylive dans le forum Réseau
    Réponses: 3
    Dernier message: 28/04/2008, 14h10
  2. [Réseau] envoyer une requête http POST
    Par rich25200 dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2008, 23h15
  3. Requête HTTP POST sous .Net
    Par Médinoc dans le forum Framework .NET
    Réponses: 2
    Dernier message: 30/10/2007, 17h30
  4. [LINUX] Simuler une requête HTTP POST ou GET
    Par Anified dans le forum Linux
    Réponses: 1
    Dernier message: 05/02/2007, 16h11
  5. Comment effectuer une requête http post ?
    Par Turtle_fr dans le forum 4D
    Réponses: 10
    Dernier message: 07/09/2006, 01h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo