{"id":660,"date":"2019-06-06T17:19:42","date_gmt":"2019-06-06T16:19:42","guid":{"rendered":"http:\/\/wollef.org\/?p=660"},"modified":"2019-06-06T17:19:42","modified_gmt":"2019-06-06T16:19:42","slug":"connectons-nous-au-serveur-cloud-de-mercedes-12-utiliser-les-api-avec-curl","status":"publish","type":"post","link":"https:\/\/wollef.org\/blog\/connectons-nous-au-serveur-cloud-de-mercedes-12-utiliser-les-api-avec-curl\/","title":{"rendered":"Connectons-nous au serveur Cloud de Mercedes (2\/2) &#8211; Utiliser les API avec CuRL"},"content":{"rendered":"<p>Pour appeler le serveur Mercedes il faut envoyer des commandes REST en https .<\/p>\n<p>J\u2019ai trouv\u00e9 une explication de l&#8217;utilisation de ces commandes sur le site\u00a0de SCIP\u00a0: CAR HACKING ANALYSIS OF THE MERCEDES CONNECTED VEHICLE API: <a href=\"http:\/\/www.scip.ch\/en\/?labs.20180405\">www.scip.ch\/en\/?labs.20180405<\/a> .<\/p>\n<p><em>Nota : Https est un Protocole de transmission permettant \u00e0 l&#8217;utilisateur d&#8217;acc\u00e9der \u00e0 des pages web par l&#8217;interm\u00e9diaire d&#8217;un navigateur.\u00a0<\/em><em>Rest est une logique d\u2019appel d\u2019API de serveurs.<\/em><\/p>\n<h3><a name=\"_Toc6859815\"><\/a>1.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CURL<\/h3>\n<p>CURL est une interface en ligne de commande, destin\u00e9e \u00e0 r\u00e9cup\u00e9rer le contenu d&#8217;une ressource accessible par un r\u00e9seau informatique. La ressource est d\u00e9sign\u00e9e \u00e0 l&#8217;aide d&#8217;une URL et doit \u00eatre d&#8217;un type support\u00e9 par le logiciel.<\/p>\n<p>Normalement on ne peut pas utiliser CURL sur Windows mais des personnes ont reprogramm\u00e9 CURL pour qu\u2019on puisse utiliser CURL sur Windows(<a href=\"https:\/\/o7planning.org\/fr\/11617\/installation-de-curl-sous-windows\">https:\/\/o7planning.org\/fr\/11617\/installation-de-curl-sous-windows<\/a>). Donc j\u2019ai t\u00e9l\u00e9charg\u00e9 la version Windows de CURL sur mon PC et j\u2019ai fait un test avec mon Blog et ceci a march\u00e9 (j\u2019ai bien obtenu le contenu de la page de mon blog dans le fichier mapage.html).<\/p>\n<p>curl&#8221; http:\/\/wollef.org\/fr\/mieux-que-pokemon-go-pixelmon-mod\/ &#8211;output mapage.html<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-661\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl1-300x83.png\" alt=\"\" width=\"535\" height=\"148\" \/><\/p>\n<h3><a name=\"_Toc6859816\"><\/a>2.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Connexion s\u00e9curis\u00e9e et Redirect URL<\/h3>\n<h4>a)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Le principe<\/h4>\n<p>Avant d\u2019acc\u00e9der aux donn\u00e9es avec l\u2019API il faut montrer qu\u2019on est le propri\u00e9taire du compte Mercedes. Ce n\u2019est malheureusement pas aussi simple que de taper un nom d\u2019utilisateur et un mot de passe.<\/p>\n<p>En effet le propri\u00e9taire du compte (la personne) doit approuver l\u2019utilisation des donn\u00e9es du compte par l\u2019application que l\u2019on a d\u00e9clar\u00e9e juste avant.<\/p>\n<p>Le m\u00e9canisme est d\u00e9crit dans l\u2019article de SCIP dont je parle juste avant, et aussi dans la documentation Mercedes\u00a0 ( <a href=\"https:\/\/developer.mercedes-benz.com\/content-page\/oauth-documentation\">https:\/\/developer.mercedes-benz.com\/content-page\/oauth-documentation<\/a> ).<\/p>\n<p>Pour simplifier cela donne les \u00e9tapes suivantes\u00a0:<\/p>\n<ul>\n<li>Etape A\u00a0: L\u2019application qui veut utiliser les donn\u00e9es doit envoyer l\u2019utilisateur vers une page Mercedes pour y taper son utilisateur et mot de passe<\/li>\n<li>Etape B\u00a0: L\u2019utilisateur va pouvoir saisir ces informations et dire qu\u2019il approuve l\u2019utilisation des donn\u00e9es par l\u2019application<\/li>\n<li>Etape C\u00a0: Le serveur Mercedes renvoie alors l\u2019utilisateur vers l\u2019application en donnant une cl\u00e9 d\u2019acc\u00e8s \u00e0 celle\u2014ci.<\/li>\n<\/ul>\n<p>Cette derni\u00e8re action (le retour vers l\u2019application) se fait avec la \u2018redirect url\u2019.<\/p>\n<h4>b)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Configuration de la redirect URL<\/h4>\n<p>On doit indiquer dans la page de configuration la redirect URL. Pour les premiers tests en CURL, ce sera une url \u2018localhost\u2019 (car on n\u2019a pas encore notre serveur avec le jeu en place).<\/p>\n<p><em>Note\u00a0: Sur l\u2019impression d\u2019\u00e9cran, il y a un autre redirect URL, c\u2019est celle de l\u2019application finie (celle int\u00e9gr\u00e9e avec salesforce). Nous n\u2019en avons pas besoin pour le moment.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-663\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl3-300x167.png\" alt=\"\" width=\"489\" height=\"272\" \/><\/p>\n<h3><a name=\"_Toc6859817\"><\/a>3.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Mise en place de la connexion<\/h3>\n<p>La premi\u00e8re \u00e9tape est de conna\u00eetre les informations qui permettent \u00e0 l\u2019application d\u2019acc\u00e9der au serveur Mercedes avec les API.<\/p>\n<p>Ce\u00a0sont les <strong>client id<\/strong> et <strong>client secret<\/strong> qui ont \u00e9t\u00e9 cr\u00e9\u00e9s quand on a d\u00e9clar\u00e9 l\u2019application <em>(ils sont\u00a0sur\u00a0dans le texte de ce blog tronqu\u00e9s pour des raison de s\u00e9curit\u00e9, les id r\u00e9els obtenus et \u00e0 saisir sont plus longs<\/em>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-664\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl4-300x114.png\" alt=\"\" width=\"505\" height=\"192\" \/><\/p>\n<p>Ensuite, on simule l\u2018\u00e9tape A \u00e0 la main, en tapant l\u2019URL d\u2019authentification dans le navigateur\u00a0avec le seul client-id:<\/p>\n<p>https:\/\/api.secure.mercedes-benz.com\/oidc10\/auth\/oauth\/v2\/authorize?response_type=code&amp;client_id=36f504aa-f141-41ad-&#8230;&#8230;&amp;redirect_uri=<strong>https%3A%2F%2Flocalhost<\/strong>&amp;scope=mb:user:pool:reader%20mb:vehicle:status:general<\/p>\n<p>On arrive sur une page pour se connecter, c\u2019est l\u2019\u00e9tape B faite par l\u2019utilisateur.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-665 aligncenter\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl5-300x205.png\" alt=\"\" width=\"300\" height=\"205\" \/><\/p>\n<p>Le serveur Mercedes demande d\u2019approuver la connexion aux donn\u00e9es<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-666 aligncenter\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl6-300x268.png\" alt=\"\" width=\"300\" height=\"268\" \/><\/p>\n<p>Ensuite le serveur Mercedes redirige vers une page web (return URL), en donnant un code d\u2018autorisation unique\u00a0: <strong>6e9d89c4-a374-4bb9-8c88-673034f87342<\/strong>. C\u2019est l\u2019\u00e9tape C.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-667\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl7-300x30.png\" alt=\"\" width=\"470\" height=\"47\" \/><\/p>\n<h3><a name=\"_Toc6859818\"><\/a>4.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Obtenir le jeton de session<\/h3>\n<p>Maintenant on va demander avec l\u2019API (donc en utilisant CURL) d\u2019obtenir le jeton de session qui sera utilis\u00e9 pour tous les appels suivant \u00e0 l\u2019API.<\/p>\n<p>Il y a une astuce\u00a0: c\u2019est que l\u2019appel demande les client Id et client secret dans une forme sp\u00e9ciale qui est l\u2019encodage base 64.<\/p>\n<p>Pour l\u2019obtenir j\u2019ai utilis\u00e9 une application disponible sur le web\u00a0: Base 64 Encode <a href=\"https:\/\/www.base64encode.net\/\">https:\/\/www.base64encode.net\/<\/a><\/p>\n<p>Pour encoder, on passe \u00e0 cette application une chaine de caract\u00e8re compos\u00e9e du client id et du secret id s\u00e9parar\u00e9s par un <strong>:<\/strong>\u00a0(double point).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-668 aligncenter\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl8-300x53.png\" alt=\"\" width=\"300\" height=\"53\" \/><\/p>\n<p>On obtient la forme encod\u00e9e des informations suivantes <em>(nota : la partie du milieu est tronqu\u00e9e pour des raisons de s\u00e9curit\u00e9)<\/em> :<\/p>\n<p>MzZmNTA0YWEtZjE0MS00MWFkLTkz &#8230;&#8230; QxNjUtNDUwOS04MTdhLTE2YTRkZjViMTM3ZA==<\/p>\n<p>On peut maintenant faire l\u2019appel vers l\u2019API pour initialiser la session en y int\u00e9grant le token (incluant donc c lient id et secret id) et le code d&#8217;autorisation unique de l&#8217;\u00e9tape B :<\/p>\n<p>curl -X POST &#8220;https:\/\/api.secure.mercedes-benz.com\/oidc10\/auth\/oauth\/v2\/token&#8221; -H &#8220;authorization: Basic <strong>MzZmNTA0YWEtZjE0MS00MWFkLTkz&#8230;&#8230;QxNjUtNDUwOS04MTdhLTE2YTRkZjViMTM3ZA==<\/strong>&#8221; -H &#8220;content-type: application\/x-www-form-urlencoded&#8221; -d &#8220;grant_type=authorization_code&amp;code=<strong>6dee706b-9ce9-4f3a-85e8-bd696aae8bef<\/strong>&amp;redirect_uri=https%3A%2F%2Flocalhost&#8221;<\/p>\n<p>Hourra\u00a0! Le serveur Mercedes nous a renvoy\u00e9 les jetons de connexion (access token)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-669\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl9-300x90.png\" alt=\"\" width=\"510\" height=\"153\" \/><\/p>\n<h3><a name=\"_Toc6859819\"><\/a>5.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Utilisation de la session\u00a0: appel d\u2019une API\u00a0: la liste des voitures<\/h3>\n<p>Une fois qu\u2019on a un jeton de session on peut s\u2019en servir pour appeler les APIs avec Curl.<\/p>\n<p>On va appeler ici trois API tel que document\u00e9es ici :\u00a0<a href=\"https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/\">https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/<\/a>\u00a0.<\/p>\n<h4>a)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Obtenir la liste des voitures<\/h4>\n<p>curl -X GET &#8220;https:\/\/api.mercedes-benz.com\/experimental\/connectedvehicle\/v1\/<strong>vehicles<\/strong>&#8221;\u00a0 -H &#8220;accept: application\/json&#8221;\u00a0 -H &#8220;authorization: Bearer <strong>f9da01aa-0c07-412b-bb0c-f31a7b413b7b<\/strong>&#8221;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-671\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl10-300x49.png\" alt=\"\" width=\"478\" height=\"78\" \/><\/p>\n<p>On peut lire l\u2019Id de la voiture dans la r\u00e9ponse\u00a0: <strong>E09C4378AD45F1A304<\/strong><\/p>\n<p>Documentation\u00a0: <a href=\"https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/docs#_get_the_vehicleid_from_the_connected_vehicle_api\">https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/docs#_get_the_vehicleid_from_the_connected_vehicle_api<\/a><\/p>\n<h4>b)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Obtenir les informations sur la voiture<\/h4>\n<p>curl -X GET &#8220;https:\/\/api.mercedes-benz.com\/experimental\/connectedvehicle\/v1\/<strong>vehicles\/E09C4378AD45F1A304<\/strong>&#8221; -H &#8220;accept: application\/json&#8221; -H &#8220;authorization: Bearer <strong>f9da01aa-0c07-412b-bb0c-f31a7b413b7b<\/strong>&#8221;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-672\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl11-300x56.png\" alt=\"\" width=\"520\" height=\"97\" \/><\/p>\n<p>Documentation\u00a0: <a href=\"https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/docs#_2_get_additional_information_about_your_car\">https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/docs#_2_get_additional_information_about_your_car<\/a><\/p>\n<h4>c)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Verrouiller les portes<\/h4>\n<p>curl -X POST &#8220;https:\/\/api.mercedes-benz.com\/experimental\/connectedvehicle\/v1\/<strong>vehicles\/E09C4378AD45F1A304\/doors<\/strong>&#8221; -H &#8220;Content-Type: application\/json&#8221; -H &#8220;authorization: Bearer f9da01aa-0c07-412b-bb0c-f31a7b413b7b&#8221;\u00a0 -d &#8220;{ \\&#8221;command\\&#8221;: \\&#8221;LOCK\\&#8221;}&#8221;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-673\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/curl12-300x45.png\" alt=\"\" width=\"520\" height=\"78\" \/><\/p>\n<p>Documentation: <a href=\"https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/docs#_4_set_the_lock_state_of_your_car_doors\">https:\/\/developer.mercedes-benz.com\/apis\/connected_vehicle_experimental_api\/docs#_4_set_the_lock_state_of_your_car_doors<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<blockquote>\n<p style=\"text-align: center;\"><strong><em>Nous voici donc en mesure maintenant d&#8217;appeler les API du serveur Cloud de Mercedes pour notre application de jeu ! C&#8217;est ce que nous ferons dans les articles prochains !<\/em><\/strong><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Pour appeler le serveur Mercedes il faut envoyer des commandes REST en https . J\u2019ai trouv\u00e9 une explication de l&#8217;utilisation de ces commandes sur le site\u00a0de SCIP\u00a0: CAR HACKING ANALYSIS OF THE MERCEDES CONNECTED VEHICLE API: www.scip.ch\/en\/?labs.20180405 . Nota : Https est un Protocole de transmission permettant \u00e0 l&#8217;utilisateur d&#8217;acc\u00e9der \u00e0 des pages web par <a class=\"read-more\" href=\"https:\/\/wollef.org\/blog\/connectons-nous-au-serveur-cloud-de-mercedes-12-utiliser-les-api-avec-curl\/\">Continue Reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,34,40,49],"tags":[],"class_list":["post-660","post","type-post","status-publish","format-standard","hentry","category-cars-and-clouds","category-apis","category-curl","category-mercedes"],"_links":{"self":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/660","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/comments?post=660"}],"version-history":[{"count":0,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/660\/revisions"}],"wp:attachment":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/media?parent=660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/categories?post=660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/tags?post=660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}