Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2008, 20h53   #1
Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 46
Points : 46
Envoyer un message via MSN à Daxou31
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 :
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 :
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
Daxou31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 01h27   #2
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
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
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 01h56   #3
Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 46
Points : 46
Envoyer un message via MSN à Daxou31
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.
Daxou31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2008, 22h50   #4
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Code :
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
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 00h00   #5
Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 46
Points : 46
Envoyer un message via MSN à Daxou31
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
Daxou31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 09h37   #6
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
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
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 12h31   #7
Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 46
Points : 46
Envoyer un message via MSN à Daxou31
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.
Daxou31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 15h28   #8
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
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.
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 18h02   #9
Membre du Club
 
Étudiant
Inscription : mai 2008
Messages : 56
Détails du profil
Informations personnelles :
Âge : 22
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 56
Points : 46
Points : 46
Envoyer un message via MSN à Daxou31
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é.
Daxou31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h18.


 
 
 
 
Partenaires

Hébergement Web