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 :

Question PHP et CURL


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2011
    Messages : 91
    Par défaut Question PHP et CURL
    Bonsoir,

    Voici ma question.
    J'ai les données cURL suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    curl -X 'GET' \
      'https://api.ddi.michelin.com/vehicle-selector/v2/find-version-by-plate?licensePlate=EE-XX-TS&country=fr' \
      -H 'accept: application/json' \
      -H 'Accept-Language: fr-fr' \
      -H 'Authorization: Bearer Token
    Comment faire pour les utiliser dans un script PHP afin qu'elles me retourne l'URL construite et surtout le résultat sous format JSON ?

    Merci d'avance pour votre aide. N'hésitez pas si je n'ai pas été assez clair.

    Samuel PATARIN

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 360
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 360
    Billets dans le blog
    17
    Par défaut
    Je ne connais pas cURL (=> http://php.net/curl ), alors je te propose d'utiliser simplement file_get_contents() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $url = 'https://api.ddi.michelin.com/vehicle-selector/v2/find-version-by-plate?licensePlate=EE-XX-TS&country=fr';
    $token = '.....';
    $context = stream_create_context(['http' => ['header' => ["Authorization: Bearer {$token}"]]]);
    $result = file_get_contents($url, false, $context);
    $result = json_decode($result);
    Les options utilisables dans le contexte http => https://www.php.net/manual/fr/context.http.php

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu peux lancer la commande curl avec le flag --libcurl monfichier.c pour générer le code C correspondant.
    Les appels a libcurl seront les même en PHP.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2011
    Messages : 91
    Par défaut Suite de ma question
    Bonjour,

    J'ai écrit le code suivant mais il ne me retourne aucun résultat....une idée ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $url = 'https://api.ddi.michelin.com/vehicle-selector/v2/find-version-by-plate?licensePlate=EE-028-TS&country=fr';
    $token = 'eyJraWQiOiJxMXl2MzFuaXE2cWVkYzFwMHQiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhcHBfbmFtZSI6InRlc3RfdmVoaWN1bGUiLCJpc3MiOiJodHRwczpcL1wvYXBpLmRkaS5taWNoZWxpbi5jb21cL2RkaVwvYXV0aCIsImV4cCI6MTY0NDQyNDI5NCwiaWF0IjoxNjQ0NDE3MDk0LCJjbGllbnRfaWQiOiJKQ0VjNVZ2MHdOZ0cyelozeFdlekROY0Jkckd5MXR1QiIsImRldmVsb3Blcl9pZCI6Im1pY2hlbGluLXByb2RAQEBjZjQyN2JhZS03NmM1LTQ4MTUtYjI1Ni1kOWM3ZDFmZTM3ZTYiLCJqdGkiOiI2NjgzZTJkYS1jOWQ2LTQwZjQtYmM4NS1iZjRkNGI5NGU1MDkifQ.qqzsg3LvH_VSfHrd3c2XcB3O80WT-AmjfhffEOBcAC_nvgwY8GF9GvJtW-WO47K8taBVdu9SCTOi0Gek8x9BwlXhEjufAoJAZ0Of76rYWhtD9nD7cgwV7kLcaWixULEHWOOY5VglJKaoJV-NwgTPHm-cT8zWzxF8kUryySXovxZXadyTYLq_rr8X8cZMd2LNVpW46OyKqUaczpYOif1I5MhXQjGIDeFFoMPA8xNrVyPsRmcRCvZMb_bnjI7liLK_dh_qozH9CPdrZXNqvWTu9H-juvwoGZC4C7rCLuorxTlHQJamnLGpaXGGXKVs45FYN2rn2LPwUiv8i9hpl9RF9Q';
    $context = stream_context_create(['http' => ['header' => ["Authorization: Bearer {$token}"]]]);
    $result = file_get_contents($url, false, $context);
    $parsed_json = json_decode($result);
     
    $marque = $parsed_json->{'records'}[0]->{'brand'};
     
    echo $marque;
    Samuel PATARIN

  5. #5
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 704
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 704
    Par défaut
    activez l'affichage des erreurs php et vous verrez le message d'erreur.

  6. #6
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2011
    Messages : 91
    Par défaut Activation des erreurs PHP
    Bonjour,

    Pouvez vous m'indiquer comment activer les erreurs php car je ne sais pas comment faire.

    Merci d'avance

    Samuel

  7. #7
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2011
    Messages : 91
    Par défaut Erreurs PHP
    J'ai réussi à activer les erreurs PHP et j'ai le message d'erreurs suivant :

    Warning: file_get_contents(https://api.ddi.michelin.com/vehicle-selector/v2/find-version-by-plate?licensePlate=EE-028-TS&country=fr): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in /homepages/19/d780297544/htdocs/vehicule/traitement_immatriculation_bis.php on line 53

    Pouvez vous m'aider à la résoudre.

    Samuel

  8. #8
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjoure

    Personnellement, je n'utiliserais pas file_get_contents() qui devrait n'être utilisé que pour un accès fichier et pas un accès URL. Il est parfaitement exact que file_get_contents peut utiliser une URL mais est-ce vraiment la bonne fonction pour cela ? Il me semble que cette fonction est bloquée dès lors que allow-url-fopen est sur false; voir https://www.php.net/manual/en/filesy...llow-url-fopen

    PHP nous mets à disposition des fonctions curl: https://www.php.net/manual/de/book.curl.php

    Pour ton problème, la source de l'erreur peut-être multiple mais, je vois que tu hardcodes un token et là, cela me surprend : un token est généré à la volée, tu contactes ton fournisseur de données "siouplait donne-moi un token m'autorisant à ...", il t'envoie un token généré à ce moment-là et tu le recontactes "voilà, mon token est ... et j'aimerais ceci ...".

    Je crains que ta façon de procéder est incorrecte du coup.

    Comme Mathieu le suggère, affiche toutes les erreurs; ne travaille pas en aveugle mais affiche tout ce que tu reçois. Voir https://www.php.net/manual/en/functi...-reporting.php

    [EDIT]
    HTTP/1.1 500 Internal Server Error in /homepages/19/d780297544/htdocs/vehicule/traitement_immatriculation_bis.php ==> à toi d'aller voir le fichier et la ligne en question. Va aussi voir ton fichier d'erreur Apache

    Note: tu nous a donné un token, tu nous a donné une plaque de voiture ==> attention à ne pas communiquer des données sensibles.
    [/EDIT]

  9. #9
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2011
    Messages : 91
    Par défaut Suite de ma question
    Merci pour ces réponses.
    Le token que j'utilise est en dur pour l'exemple, je sais très bien qu'un token est temporaire.
    J'ai été à la ligne 53 pour voir l'erreur mais je ne sais pas comment la résoudre.

    Qu'est ce que je peux utiliser à la place de file_get_contents ?

    Merci d'avance.

    Samuel

  10. #10
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 704
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 704
    Par défaut
    je viens de voir que "file_get_contents" n'affiche pas le retour de la requête en cas d'erreur donc essayez cela :
    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
    $url = 'https://api.ddi.michelin.com/vehicle-selector/v2/find-version-by-plate?licensePlate=EE-028-TS&country=fr';
     
    $token = 'eyJraWQiOiJxMXl2MzFuaXE2cWVkYzFwMHQiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhcHBfbmFtZSI6InRlc3RfdmVoaWN1bGUiLCJpc3MiOiJodHRwczpcL1wvYXBpLmRkaS5taWNoZWxpbi5jb21cL2RkaVwvYXV0aCIsImV4cCI6MTY0NDQyNDI5NCwiaWF0IjoxNjQ0NDE3MDk0LCJjbGllbnRfaWQiOiJKQ0VjNVZ2MHdOZ0cyelozeFdlekROY0Jkckd5MXR1QiIsImRldmVsb3Blcl9pZCI6Im1pY2hlbGluLXByb2RAQEBjZjQyN2JhZS03NmM1LTQ4MTUtYjI1Ni1kOWM3ZDFmZTM3ZTYiLCJqdGkiOiI2NjgzZTJkYS1jOWQ2LTQwZjQtYmM4NS1iZjRkNGI5NGU1MDkifQ.qqzsg3LvH_VSfHrd3c2XcB3O80WT-AmjfhffEOBcAC_nvgwY8GF9GvJtW-WO47K8taBVdu9SCTOi0Gek8x9BwlXhEjufAoJAZ0Of76rYWhtD9nD7cgwV7kLcaWixULEHWOOY5VglJKaoJV-NwgTPHm-cT8zWzxF8kUryySXovxZXadyTYLq_rr8X8cZMd2LNVpW46OyKqUaczpYOif1I5MhXQjGIDeFFoMPA8xNrVyPsRmcRCvZMb_bnjI7liLK_dh_qozH9CPdrZXNqvWTu9H-juvwoGZC4C7rCLuorxTlHQJamnLGpaXGGXKVs45FYN2rn2LPwUiv8i9hpl9RF9Q';
    $entetes = ["Authorization: Bearer {$token}"];
     
     
     
    $curl = curl_init();
     
    curl_setopt_array($curl, [
    	CURLOPT_URL => $url,
    	CURLOPT_HTTPHEADER => $entetes,
    	CURLOPT_RETURNTRANSFER => TRUE,
    ]);
     
     
    $resultat = curl_exec($curl);
     
    curl_close($curl);
    regardez là pour voir la documentation de la bibliothèque curl dans php :
    https://www.php.net/manual/fr/function.curl-setopt.php

  11. #11
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Citation Envoyé par patarins Voir le message
    Qu'est ce que je peux utiliser à la place de file_get_contents ?
    Ben... Curl... Je t'ai donné le lien dans ma réponse

  12. #12
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2011
    Messages : 91
    Par défaut Suite de ma question
    Bonjour,

    Avec ce que m'a indiqué mathieu hier j'obtiens la chaîne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"records":[{"id":"57af9c73-338b-40d3-9cf7-2e8a318d5fd8","brand":"Citroen","model":"C3 III","version":"C3 III","versionTiny":"c3 iii 1.2l vti","longNameVersion":"C3 III 1.2L VTi","fullNameVersion":"C3 III 1.2L VTi ","subbody":"","country":"fr","type":"VL","technicalInformations":{"kw":60,"rpm":5750,"fuel":"ESSENCE","dinHp":82,"ktype":"58664","litres":1.2,"tuning":"R-Cat","vehtype":"1","madeFrom":"2012","typeAbbr":"PC","extraInfo":"VTi","madeUntil":"2016","engineCode":"HMZ (EB2)","maintenance_information_available":true}},{"id":"9692e3e0-a328-419e-b9f1-3a0a53fb63ae","brand":"Citroen","model":"C3 III","version":"C3 III","versionTiny":"c3 iii 1.2l e-vti","longNameVersion":"C3 III 1.2L e-VTi","fullNameVersion":"C3 III 1.2L e-VTi ","subbody":"","country":"fr","type":"VL","technicalInformations":{"kw":60,"rpm":5750,"fuel":"ESSENCE","dinHp":82,"ktype":"58664","litres":1.2,"tuning":"R-Cat","vehtype":"1","madeFrom":"2013","typeAbbr":"PC","extraInfo":"e-VTi","madeUntil":"2016","engineCode":"HMZ (EB2)","maintenance_information_available":true}}],"metadata":{"total":2,"page":1,"limit":2}}
    Maintenant, je ne sais pas comment faire pour extraire par exemple la donnée correspondant à "brand".
    Est ce que cette chaîne de caractère est un tableau ?

    Merci d'avance pour votre aide.

    Samuel PATARIN

  13. #13
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Tu as donc reçu une réponse en JSON; tu peux utiliser https://www.php.net/manual/en/function.json-decode.php pour le convertir en un tableau.

  14. #14
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $json = json_decode($str,true); // $str étant la chaine reçue
     
    foreach($json['records'] as $record) {
        var_dump($record['brand']);
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [Conception] Question PHP pour formulaire
    Par julien8craft dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 31/07/2006, 19h00
  2. [MySQL] question php pour formulaire
    Par julien8craft dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/07/2006, 18h42
  3. [SQL] 2 questions PHP/SQL
    Par Misoss dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 22/06/2006, 17h29
  4. [Question] Php - MySQL
    Par Badaboumpanpan dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/06/2006, 18h55

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