- État Fermée
- Pourcentage achevé
- Type Anomalie
- Catégorie Freebox OS → API
- Assignée à Personne
- Système d'exploitation Tous
- Sévérité Basse
- Priorité Très Basse
- Basée sur la version 2.0.1
- Due pour la version Non décidée
-
Échéance
Non décidée
- Votes
- Privée
Ouverte par Nilpohc - 05/07/2013
FS#12778 - Freebox OS 2.0.1 : Appel API renvoie des résultats étranges
Bonjour,
J’essaie de prendre en main l’API du nouveau firmware, et j’ai quelques déboires inexplicables. Dans l’ordre logique des choses :
Le tracking de la demande d’autorisation (GET /api/v1/login/authorise/{le track_id reçu}) répond d’abord avec un “invalid_request” et un message “Requête invalide (404)” mais si j’insiste (boucle d’appels) ça passe assez vite (success = true) et j’ai bien “status = pending” et la suite est OK jusqu’à “status = granted”.
⇒ apparemment un problème de tempo entre la demande et l’arrivée du prompt sur le boitier de la Freebox ?
Ensuite tout fonctionne jusqu’à l’ouverture d’une session. J’ai ensuite deux problèmes loufoques :
La demande de la liste des appels (GET sur /api/v1/call/log/) me renvoie systématiquement “invalid_request” et un message “Requête invalide (404)”. Mon en-tête “X-Fbx-App-Auth” semble correct car si j’en envoie un falsifié je reçois un “auth_required” à la place.
La demande de la liste des contacts (GET /api/v1/contact/) passe (success = true) mais je reçois un objet ContactEntry vide à l’exception de l’id qui change à chaque appel (?!).
Pour comparaison, j’ai fait le test de me connecter dans mon navigateur à l’interface puis de lancer ces deux requêtes manuellement dans un autre onglet et là tout fonctionne parfaitement.
Mon programme de test est en PHP 5.3.13 et basé sur libcurl (j’aurais préféré tout en HTML + javascript/ajax mais la Freebox refuse les requêtes CORS).
Merci d’avance !
Chargement...
Activer les raccourcis clavier
- Alt + ⇧ Shift + l Se connecter/Se déconnecter
- Alt + ⇧ Shift + a Ouvrir une tâche
- Alt + ⇧ Shift + m Mes recherches
- Alt + ⇧ Shift + t Rechercher par ID de tâche
Liste des tâches
- o Ouvrir la tâche sélectionnée
- j Déplacer le curseur vers le bas
- k Déplacer le curseur vers le haut
Détails de la tâche
- n Tâche suivante
- p Tâche précédente
- Alt + ⇧ Shift + e ↵ Enter Modifier cette tâche
- Alt + ⇧ Shift + w Surveiller
- Alt + ⇧ Shift + y Fermer cette tâche
Édition de la tâche
- Alt + ⇧ Shift + s Enregistrer la tâche
Pas mieux avec la version 2.0.2
Aucun problème en ce qui me concerne sur l’auth et sur /api/v1/call/log/, et pourtant je suis bien en 2.0.2 également (et j’utilise PHP 5.4.4).
Flûte alors. J’utilise une install WAMP 2.2E x64 avec un libcurl patché. Je vais retenter avec du 32bit officiel pour voir, sait-on jamais.
Bon, pas mieux. Peut-être ai-je mal compris la doc ? Voici ce que je fais :
1) GET http://mafreebox.freebox.fr/api/v1/login/ ⇒ me renvoie un “challenge”
2) POST http://mafreebox.freebox.fr/api/v1/login/session/ avec comme valeur pour “password” le résultat de hash_hmac(’sha1’, $challenge, $app_token);
⇒ me renvoie les permissions de mon app ainsi qu’un “session_token”
3) GET http://mafreebox.freebox.fr/api/v1/call/log/ avec un en-tête HTTP supplémentaire “X-Fbx-App-Auth” qui vaut le “session_token” précédent.
Qu’est-ce que je fais de travers ?
À priori ça m’a l’air bon. J’ai commencé un helper PHP pour l’API, essaye avec pour voir : https://github.com/cvergne/FreeboxOS_Client
L’analyse du RestAPIClient m’a révélé le problème : je faisais un appel à curl_init() au début puis un appel à curl_close() à la fin, au lieu de le faire pour chaque requête curl ! J’avoue avoir peu d’expérience avec curl mais c’est ainsi que je l’avais utilisée jusqu’ici et je n’avais pas rencontré de souci. Comme quoi...
Merci beaucoup pour l’éclairage en tout cas et bonne continuation pour ton helper, je vais pouvoir enfin m’occuper du mien
Pour ma part, ce ticket est clos.