Suivi de colis, API et Android
J’ai été agréablement surpris de remarquer aujourd’hui, notamment après mes plaintes contre l’interface volontairement restreinte offerte sur le web, une application pour Android appelée Mon Suivi La Poste développée par « La Poste mobile ». Curieux, et destinataire de nombreux colis en transit en cette période de fêtes, j’ai installé et essayé l’application. Or, systématiquement, j’ai obtenu l’erreur suivante, y compris lorsque j’étais convaincu d’être parfaitement connecté :
La qualité des réseaux environnants est momentanément insuffisante pour vous permettre d’accéder à nos services mobiles. Nous vous invitons à reessayer ultérieurement. L’équipe de La Poste.
Curieux, et en application de l’alinéa III de l’article L122-6-1 du Code de la Propriété Intellectuelle, j’ai cherché à connaître les appels faits par mon mobile sur demande de l’application afin de voir quel composant, dans mon système CyanogenMod, faisait échouer ces requêtes. Il s’avère que l’appel fait ressemble à cela (j’ai remplacé le numéro de suivi réel sur 13 caractères par « NUMERO_DE_SUIVI
» :
GET /outilsuivi/web/suiviInterMetiers.php
?key=d112dc5c716d443af02b13bf708f73985e7ee943
&method=xml&code=NUMERO_DE_SUIVI HTTP/1.1
User-Agent: Dalvik/1.5.2 (Linux; U; Android 2.3.1)
Host: www.laposte.fr
Connection: Keep-Alive
Accept-Encoding: gzip
Notons que la requête est faite sans chiffrement (utilisation de HTTP et pas de HTTPS) ce qui permet à tous les intermédiaires de l’examiner (opérateur mobile, fournisseur du WiFi). Un simple analyseur de protocole comme Wireshark permet d’examiner la requête ci-dessus ainsi que la réponse associée :
HTTP/1.1 200 OK
Date: Sat, 17 Dec 2011 11:07:13 GMT
Server: Apache
Cache-Control: no-cache, must-revalidate
Expires: Sat, 26 Jul 1997 05:00:00 GMT
Content-Type: text/xml
Content-length: 497
Connection: Keep-Alive
Set-Cookie: lb_outilsuivi_new_pf=balancer.route2; path=/;
<?xml version='1.0' ?>
response>
<status>1</status>
<
`NUMERO_DE_SUIVI`client>Particulier</client>
<date>16/12/2011</date>
<message>Votre colis est arrivé sur son site de distribution</message>
<gamme>4</gamme>
<base_label>Coliposte</base_label>
<link>
<
https://www.coliposte.net/particulier/suivi_particulier.jsp
?colispart=NUMERO_DE_SUIVIlink>
</error></error>
<response> </
Tout à l’air correct de mon côté, même si l’application considère qu’il y a une erreur :
L’URL de base est
https://www.laposte.fr/outilsuivi/web/suiviInterMetiers.php
avec des paramètres supplémentaires :code
est le numéro de suivi du colis, sur 13 caractères.method
, qui contient icixml
, est la méthode de codage du résultat à utiliser, on peut penser quejson
donnerait un résultat en JSON plutôt qu’en XML. D’après ce qu’on peut voir sur le site web,image
doit renvoyer une image.key
est probablement un identifiant de l’application Android. Mon navigateur utilisait initialement unUser-Agent
non-standard, il semblerait queDalvik
doive être présent pour que la requête fonctionne.
La réponse contient un certain nombre de champs permettant le suivi du colis :
status
contient « 1 » si tout va bien est est vide en cas d’erreur (numéro de colis inconnu par exemple).code
reprend le numéro de suivi transmis.client
contient « Particulier » dans mon cas, je ne connais pas les autres valeurs possibles, mais cela semble logique.date
contient la date de l’événement décrit en cas de succès, est vide sinon.message
contient le message décrivant l’événement ou celui décrivant l’erreur.gamme
contient « 4 » pour moi dans tous les cas.base_label
contient « Coliposte » pour moi en cas de succès, est vide sinon.link
contient le lien vers le suivi sur le site web de Coliposte en cas de succès, est vide sinon.error
est vide en cas de succès, et contient une chaîne en anglais telle que «error_invalid_code
» en cas de numéro de suivi inconnu ou «error_nb_chars
» si un numéro de suivi ne comportant pas 13 caractères est utilisé. La liste des codes d’erreur et leur explication en français est donnée dans ce fichier Javascript fourni par La Poste.
Au vu de ces constatations, je dois en déduire que c’est l’application « Mon Suivi La Poste » qui est fautive en ne comprenant pas la réponse, pourtant apparemment correcte, renvoyée par le serveur.