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 du Club
    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
    Points : 50
    Points
    50
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 107
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 107
    Points : 8 235
    Points
    8 235
    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
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 225
    Points
    20 225
    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 du Club
    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
    Points : 50
    Points
    50
    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 éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 238
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  6. #6
    Membre du Club
    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
    Points : 50
    Points
    50
    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 du Club
    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
    Points : 50
    Points
    50
    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 émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 758
    Points : 2 995
    Points
    2 995
    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]
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  9. #9
    Membre du Club
    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
    Points : 50
    Points
    50
    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 éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 238
    Points : 15 536
    Points
    15 536
    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 émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 758
    Points : 2 995
    Points
    2 995
    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
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  12. #12
    Membre du Club
    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
    Points : 50
    Points
    50
    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 émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 758
    Points : 2 995
    Points
    2 995
    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.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 225
    Points
    20 225
    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, 18h00
  2. [MySQL] question php pour formulaire
    Par julien8craft dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/07/2006, 17h42
  3. [SQL] 2 questions PHP/SQL
    Par Misoss dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 22/06/2006, 16h29
  4. [Question] Php - MySQL
    Par Badaboumpanpan dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/06/2006, 17h55

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