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 :

cookie fsockopen requete


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    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 : 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
     
     
    		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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    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

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

Discussions similaires

  1. Requetes HTTP et cookie de session
    Par bigltnt dans le forum Langages serveur
    Réponses: 1
    Dernier message: 29/12/2010, 18h16
  2. [Cookies] Destruction de session et requete sql
    Par webcap dans le forum Langage
    Réponses: 2
    Dernier message: 26/01/2009, 11h14
  3. Requete HTTP Post et Cookies
    Par Ptitkarl dans le forum Langage
    Réponses: 17
    Dernier message: 24/04/2008, 15h31
  4. Réponses: 1
    Dernier message: 15/05/2007, 17h31
  5. Poster une requete POST avec fsockopen
    Par ePoX dans le forum Langage
    Réponses: 8
    Dernier message: 27/11/2005, 14h20

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