Aller au contenu principal

HTTP 4 - cookies et Post

astuce

ATTENTION : L'outil principal de débogage pour les appels réseaux est le network inspector dans Android Studio.

  1. Cliquer sur Fichier / File ou le symbole ☰ en haut à gauche
  2. Choisir View / Tool Windows / AppInspection
  3. Dans la fenêtre AppInspection, choisir l'onglet Network Inspector
  4. Tu devrais voir apparaître les appels réseaux de ton application

Nous allons voir 2 éléments:

  • comment envoyer des données en POST avec une classe de transfert
  • comment implémenter les cookies pour relier 2 appels ensemble

Les cookies servent à relier plusieurs requêtes dans une session HTTP.

Nous allons donc voir comment enchaîner une inscription/connexion et un appel à l'accueil des tâches.

Le code de cette recette est disponible ici.

SessionCookieJar.kt

On ajoute d'abord un cookie jar (un pot à cookies) pour que le client HTTP puisse stocker les cookies d'un appel à l'autre :

Chargement...

RetrofitInstance.kt

Au niveau de la configuration de Retrofit, on va ajouter la gestion des cookies.

Chargement...

Les points importants ici:

  • Le loggingInterceptor permet de voir toutes les requêtes et réponses HTTP dans le logcat
  • Le niveau BODY affiche les en-têtes ET le contenu complet des requêtes/réponses
  • on a ajouté un cookie jar (un pot à cookies) pour que le client HTTP puisse stocker les cookies d'un appel à l'autre
  • on configure le client OkHttp avec le logging interceptor ET le cookie jar
  • on utilise à la fois ScalarsConverterFactory et GsonConverterFactory pour gérer différents types de réponses

KickMyBApi.kt

Au niveau de l'API, nous allons définir les méthodes:

  • inscription qui envoie en POST un objet RequeteInscription
  • connexion qui envoie en POST un objet RequeteConnexion
  • accueilTache qui récupère l'accueil (nécessite d'être connecté via cookie)
Chargement...

RequeteInscription.kt

On aura besoin de cette classe pour envoyer une requête d'inscription :

Chargement...

RequeteConnexion.kt

De même pour la connexion :

Chargement...

MainActivity.kt

Dans l'interface Compose, on va pouvoir tester les trois appels:

Chargement...

Points importants:

  • Le bouton "Inscription" fait un POST avec un objet RequeteInscription
  • Le bouton "Connexion" fait un POST avec un objet RequeteConnexion
  • Le bouton "Accueil Tâches" fait un GET qui utilise automatiquement le cookie de session
  • Les réponses sont affichées dans des Cards séparées grâce à un composant réutilisable

KickMyBApiInstrumentationTest.kt

IMPORTANT il faut envoyer au moins une requête à https://kickmyb-server.onrender.com/ avant de rouler le test pour "réveiller" le serveur.

Le test illustre deux scénarios d'utilisation :

Chargement...

Ce qu'on observe ici :

  • Test 1: Inscription puis accès à l'accueil
    • On s'inscrit avec un email aléatoire pour éviter les conflits
    • L'inscription nous connecte et crée un cookie de session
    • L'appel à l'accueil fonctionne car le cookie jar retourne automatiquement le cookie
  • Test 2: Connexion puis accès à l'accueil
    • On crée d'abord un compte avec inscription
    • On se connecte avec ce compte
    • On peut ensuite accéder à l'accueil grâce au cookie de session obtenu lors de la connexion