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 :

Curl et Javascript


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeuse Web

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 15
    Points
    15
    Par défaut Curl et Javascript
    Bonjour

    J'aboutis sur la réalisation d'un projet où j'ai été contrainte d'utiliser curl pour récupérer un bout d'information sur un site. Jusque là, tout va bien, si ce n'est un léger détail que je peine à résoudre.

    Via ma connexion perso, j'accède donc au contenu de la petite page qui m'intéresse mais son contenu est composé d'un gigantesque array javascript. Malgré les preg_match et autres tentatives de str_replace et quelques autres, je n'arrive pas à isolé cet array dans ma variable $infos pour pouvoir en extraire ce dont j'ai besoin.

    Quelqu'un a t-il déjà été confronté à cette problématique?

    Je vous remercie par avance pour votre attention.

  2. #2
    Membre du Club
    Homme Profil pro
    IT Operator
    Inscrit en
    Mars 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : IT Operator
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 43
    Points : 44
    Points
    44
    Par défaut
    il faudrait nous donner le bout de code de récupération du contenu en cURL que tu as effectué.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeuse Web

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Hop, voici mon appel curl et le bout que j'essai de cibler dans mon tri ensuite.

    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
    49
    50
    51
    52
     
    function init_curl($login, $password, $url=array(), $param) {
    	if(empty($login) || empty($password) || empty($url) || empty($param)) {
    		return false;
    	}
     
    	$param_connect = array('login' => $login, 'password' => $password);
    	$connect_tmp = '../content/tmp/connexion_.txt';
    	$url_site = 'http://www.***.com';
    	$url_site_ = 'http://www.***.php';
     
    	if(!file_exists($connect_tmp)) {
    		touch($connect_tmp);
    	}
     
    	$curl = curl_init();
    	curl_setopt($curl, CURLOPT_URL, $url_site);
    	curl_setopt($curl, CURLOPT_COOKIESESSION, true);
    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    	//curl_setopt($curl, CURLOPT_POST, true);
    	curl_setopt($curl, CURLOPT_POSTFIELDS, $param_connect);
    	curl_setopt($curl, CURLOPT_COOKIEJAR, realpath($connect_tmp));
    	$return = curl_exec($curl);
    	curl_close($curl);
     
    	if(preg_match('#Username and password do not match#i', $return)) {
    		echo 'Connexion échoué';
    		exit;
    	}
     
    	switch ($param) {
    		case 'admin':
    			$curl = curl_init();
    			curl_setopt($curl, CURLOPT_URL, $url_site_);
    			curl_setopt($curl, CURLOPT_COOKIESESSION, true);
    			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    			//curl_setopt($curl, CURLOPT_POST, true);
    			curl_setopt($curl, CURLOPT_POSTFIELDS, $param_connect);
    			curl_setopt($curl, CURLOPT_COOKIEFILE, realpath($connect_tmp));
    			curl_exec($curl);
    			foreach($url as $type => $content) {
    				curl_setopt($curl, CURLOPT_URL, $content);
    				$infos = curl_exec($curl);
    				if($type == 'histoire') {
    					traitement_histoire($infos);
    				}
    			}
    			curl_close($curl);
    			unlink($connect_tmp);
    			break;
    	}
    }
    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 traitement_histoire($infos) {
    	/* En commentaire : essaie via un fichier avec le contenu
    	$fichier = '../content/tmp/histoire_' . date('Y_m_d') . '.txt';
    	if(!file_exists($fichier)) {
    		fopen($fichier, 'x+');
    	}
    	file_put_contents($fichier, $infos);
    	$infos = file_get_contents($fichier);
    	$infos = _toString($infos);
    	$infos = str_replace('[', '-', $infos);
    	$infos = str_replace(']', '-', $infos);
    	$infos = str_replace('<script>', '<p>', $infos);
    	$infos = str_replace('</script>', '</p>TENDT', $infos);
    	$infos = str_replace('new Array', 'tableau', $infos);
    	$infos = str_replace('"', '', $infos);
    	$infos = str_replace("'", '', $infos);
    	echo $infos;*/
    	preg_match('/InfosPays(.*)<\/script>/',$infos,$match);
    	echo $match[0].'<br>';
    	echo $match[1];
    	var_dump($match);
    	//echo $infos;
    }
    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
     
    <script>
    var InfosPays = new Array();
    InfosPays[0] = new Array();
    InfosPays[0]['Nom'] = 'France';
    InfosPays[0]['Population'] = '8107';
    InfosPays[0]['Province'] = new Array();
    InfosPays[0]['Province'][0] = new Array();
    InfosPays[0]['Province'][0]['Nom'] = 'Comté d\'Artois';
    InfosPays[0]['Province'][0]['Population'] = '367';
    InfosPays[0]['Province'][0]['Fleurs'] = '* * * * * ';
    InfosPays[0]['Province'][0]['Ville'] = new Array();
    InfosPays[0]['Province'][0]['Ville'][4] = new Array();
    InfosPays[0]['Province'][0]['Ville'][4]['Nom'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][4]['Maire'] = 'jules_cesar';
    InfosPays[0]['Province'][0]['Ville'][4]['Population'] = '87';
    InfosPays[0]['Province'][0]['Ville'][5] = new Array();
    InfosPays[0]['Province'][0]['Ville'][5]['Nom'] = 'Cambrai';
    InfosPays[0]['Province'][0]['Ville'][5]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][5]['Population'] = '46';
    InfosPays[0]['Province'][0]['Ville'][7] = new Array();
    InfosPays[0]['Province'][0]['Ville'][7]['Nom'] = 'Péronne';
    InfosPays[0]['Province'][0]['Ville'][7]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][7]['Population'] = '54';
    InfosPays[0]['Province'][0]['Ville'][8] = new Array();
    InfosPays[0]['Province'][0]['Ville'][8]['Nom'] = 'Azincourt';
    InfosPays[0]['Province'][0]['Ville'][8]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][8]['Population'] = '41';
    InfosPays[0]['Province'][0]['Ville'][19] = new Array();
    InfosPays[0]['Province'][0]['Ville'][19]['Nom'] = 'Calais';
    InfosPays[0]['Province'][0]['Ville'][19]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][19]['Population'] = '74';
    InfosPays[0]['Province'][0]['Ville'][135] = new Array();
    InfosPays[0]['Province'][0]['Ville'][135]['Nom'] = 'Arras';
    InfosPays[0]['Province'][0]['Ville'][135]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][135]['Population'] = '56';
    </script>
    Donc j'ai tenté le preg_match('/InfosPays(.*)<\/script>/',$infos,$match); mais $match retourne empty.
    J'ai donc tenté de faire du str_replace de [, de ] et autres éléments qui aurait pu permettre à preg_match de s'ajuster. Sans résultat.
    J'ai essayé aussi en sauvegardant le curl dans un fichier texte dans init_curl() et en appelant ce fichier dans traitement_histoire(), mais cela n'a rien changé.

  4. #4
    Membre habitué Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Points : 169
    Points
    169
    Par défaut
    Par défaut le méta-caractère point exclu \n sauf avec le modificateur s et, toujours par défaut, un pattern est gourmand. Ça serait peut-être un peu mieux avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('/InfosPays(.*?)<\/script>/s',$infos,$match);
    Mais il y a de quoi s'amuser car c'est bien un jeu ?
    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
    49
    <?php
     
    $infos = <<<eodata
    machins avant
    <script>
    var InfosPays = new Array();
    InfosPays[0] = new Array();
    InfosPays[0]['Nom'] = 'France';
    InfosPays[0]['Population'] = '8107';
    InfosPays[0]['Province'] = new Array();
    InfosPays[0]['Province'][0] = new Array();
    InfosPays[0]['Province'][0]['Nom'] = 'Comté d\'Artois';
    InfosPays[0]['Province'][0]['Population'] = '367';
    InfosPays[0]['Province'][0]['Fleurs'] = '* * * * * ';
    InfosPays[0]['Province'][0]['Ville'] = new Array();
    InfosPays[0]['Province'][0]['Ville'][4] = new Array();
    InfosPays[0]['Province'][0]['Ville'][4]['Nom'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][4]['Maire'] = 'jules_cesar';
    InfosPays[0]['Province'][0]['Ville'][4]['Population'] = '87';
    InfosPays[0]['Province'][0]['Ville'][5] = new Array();
    InfosPays[0]['Province'][0]['Ville'][5]['Nom'] = 'Cambrai';
    InfosPays[0]['Province'][0]['Ville'][5]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][5]['Population'] = '46';
    InfosPays[0]['Province'][0]['Ville'][7] = new Array();
    InfosPays[0]['Province'][0]['Ville'][7]['Nom'] = 'Péronne';
    InfosPays[0]['Province'][0]['Ville'][7]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][7]['Population'] = '54';
    InfosPays[0]['Province'][0]['Ville'][8] = new Array();
    InfosPays[0]['Province'][0]['Ville'][8]['Nom'] = 'Azincourt';
    InfosPays[0]['Province'][0]['Ville'][8]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][8]['Population'] = '41';
    InfosPays[0]['Province'][0]['Ville'][19] = new Array();
    InfosPays[0]['Province'][0]['Ville'][19]['Nom'] = 'Calais';
    InfosPays[0]['Province'][0]['Ville'][19]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][19]['Population'] = '74';
    InfosPays[0]['Province'][0]['Ville'][135] = new Array();
    InfosPays[0]['Province'][0]['Ville'][135]['Nom'] = 'Arras';
    InfosPays[0]['Province'][0]['Ville'][135]['Maire'] = 'truc';
    InfosPays[0]['Province'][0]['Ville'][135]['Population'] = '56';
    </script>
    machins après
    eodata;
     
     
    if(preg_match_all('#(?<!\w)InfosPays\[(?:[^;](?!(?:var|new)\s))*;#i', $infos, $match)) {
      eval(implode("\n", str_replace('InfosPays[', '$infos_pays[', $match[0])));
      echo '<pre>', print_r($infos_pays, true), '<hr>', print_r($match, true), '</pre>';
     
    }

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeuse Web

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Je ne maîtrise pas tout à fait les Regex encore, je n'avais pas du tout penser que le problème venait de là. Merci pour cet éclaircissement et précieuse aide.

    Oui, il s'agit bien d'un jeu, ou plus exactement, d'une plateforme qui facilite la lecture de certains aspect de ce jeu pour les joueurs. J'ai presque terminé, mais cette page là me donnait des soucis pour avancer. Grand grand merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Javascript avec curl
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 04/03/2013, 11h37
  2. Formulaire Javascript en Curl
    Par Onyrio dans le forum Langage
    Réponses: 3
    Dernier message: 12/01/2012, 19h06
  3. PHP: Problème de curl et javascript
    Par zinehom dans le forum Langage
    Réponses: 0
    Dernier message: 22/12/2011, 16h13
  4. [PHP 5.2] Curl: Valider un formulaire avec un submit en javascript
    Par altecad dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2011, 18h18
  5. [cURL] Simuler Javascript (document.cookies) avec cURL
    Par bono2007 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 08/12/2007, 04h48

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