Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
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 15/04/2011, 12h23   #1
Membre régulier
 
Inscription : juin 2005
Messages : 449
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 449
Points : 83
Points : 83
Par défaut cookie fsockopen requete

Bonjour à tous,

Voici ce que j'essaye de réaliser sans succès :

récupérer le contenu d'une page web via fsockopen qui est le résultat d'une validation d'un formulaire de recherche.

Voici le code utilisé :
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
 
 
		if (strtoupper(substr($url,0,7))=="HTTP://") $url=substr($url,7);
		$p = strpos($url,"/");
		if ($p===FALSE) {
			$nom_domaine=$url;
			$get="/";
		}
		else {
			$nom_domaine=substr($url,0,$p);
			$get=substr($url,$p);
		}	
 
		$errno=""; $errstr=""; $r="";
		$fp = fsockopen($nom_domaine, 80, $errno, $errstr, 15);
		if($fp) {
			socket_set_timeout($fp, 15);
			fputs($fp,"GET $get HTTP/1.1\r\n");
                        fputs($fp,"Host:  $nom_domaine\r\n");
                        fputs($fp,"Connection: Close\r\n\r\n");
			$r="";
			while(!feof($fp)) {
				$r.=fgets($fp,1024);
			}
			fclose($fp);
			return($r);
		}
		return('');
Ce code me retourne bien un contenu HTML mais surtout une erreur 404, car la validation du formulaire n'est plus valide.

Réflexion : à la validation du formulaire des cookie sont créés et identifiés que je nommerai par la suite cook1 et cook2. Ces valeurs sont connues.

Voici donc le nouveau code utilisé :
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
38
39
40
41
42
43
44
45
46
47
48
 
 
		if (strtoupper(substr($url,0,7))=="HTTP://") $url=substr($url,7);
		$p = strpos($url,"/");
		if ($p===FALSE) {
			$nom_domaine=$url;
			$get="/";
		}
		else {
			$nom_domaine=substr($url,0,$p);
			$get=substr($url,$p);
		}
 
		$cookie_str = ''; 
		$cookie = array();
		$cookie["cook1"] ="val1";
		$cookie["cook2"] = "val2" ;
 
		foreach ($cookie as $k => $v) {	
			$cookie_str .= urlencode($k) .'='. urlencode($v) .'; '; 
		}
 
		$verb = "GET";
		$uri = '/';
		$getdata_str = "";
 
		$crlf = "\r\n"; 
		$req = $verb .' '. $uri . $getdata_str .' HTTP/1.1' . $crlf; 
		$req .= 'Host: '. $nom_domaine . $crlf; 
		$req .= 'User-Agent: '.$parametres['BrowserName']. $crlf; 
 
		if (!empty($cookie_str)) 
                        $req .= 'Cookie: '. substr($cookie_str, 0, -2) . $crlf; 
 
 
		$errno=""; $errstr=""; $r="";
		$fp = fsockopen($nom_domaine, 80, $errno, $errstr, 15);
		if($fp) {
			socket_set_timeout($fp, 15);
			fputs($fp,$req);
			$r="";
			while(!feof($fp)) {
				$r.=fgets($fp,1024);
			}
			fclose($fp);
			return($r);
		}
		return('');
A la fin de l'execution, plusieurs constats :
  • execution bien plus longue que le précédent code
  • message de délais d'execution "Fatal error: Maximum execution time of 30 seconds exceeded" à la ligne "$r.=fgets($fp,1024);"
  • aucun contenu HTML retourné

req constituée :
Code :
1
2
 
GET / HTTP/1.1 Host: intranet.societe.fr User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 Cookie: cook1=val1; cook2=val2
Je n'ai pas d'autres pistes de reflexion pour le moment, est ce que quelqu'un aurait déjà réalisé ce genre de travaux pour automatiser une reprise de données ? Merci de votre aide !
samtheh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 15h53   #2
Membre éclairé
 
Avatar de BornBanane
 
Homme
Ingénieur développement logiciels
Inscription : mars 2007
Messages : 274
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mars 2007
Messages : 274
Points : 350
Points : 350
Pour faire ceci j'utiliserais plutot cURL (doc) .
Tu peux définir des données posts ou get a envoyer ainsi que des cookies. Voir la fonction curl_setopt pour cela.
Y a tout ce dont tu as besoin avec les fonctions cURL.


Bon courage
__________________
Smiley de Plomb 2009
Anciennement FrancoisIT
BornBanane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 12h04   #3
Membre régulier
 
Inscription : juin 2005
Messages : 449
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 449
Points : 83
Points : 83
Ok je vais essayer avec Curl, mais au-dela de la méthode d'accès utilisée, je voudrais savoir si sur le principe cela peut fonctionner : ne pas avoir un message comme quoi la validation du formulaire n'est plus valide.

Est ce que le fait de passer les cookie via l'option :
Code :
curl_setopt( $curl, CURLOPT_COOKIE,
suffit ? est ce qu'il faut redonner le PHPSESSID ? (comme ici : http://www.sitepoint.com/forums/php-...st-572402.html)

Je ne suis pas sur de la bonne méthode à adapter pour retrouver le bon résultat de mon formulaire....
samtheh 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 03h11.


 
 
 
 
Partenaires

Hébergement Web