Récupérer des données JSON depuis une requête HTTP en C#

Dans le développement d'applications, l'intégration d'APIs via HTTP est une tâche courante. Une API (Aplication Programming Interface) expose généralement une URL (endpoint) vers laquelle on envoie une requête. En retour, le serveur fournit des données, souvent au format JSON. Cet article se concentre sur la récupération et l'utilisation de ces données JSON avec C#.

Pour illustrer cela, prenons l'exemple d'une API publique de suivi de colis. Notez que l'accessibilité de cette API peut varier dans le temps, mais les principes présentés restent valables pour n'importe quelle API RESTful.

L'URL de base de l'API est : http://www.kuaidi100.com/query?type=CODAGE_ENTREPRISE&postid=NUMERO_COLIS

Voici quelques codes d'entreprise courants : shunfeng (SF Express), yuantong (YTO Express), zhongtong (ZTO Express), yunda (Yunda Express).

Pour construire l'URL finale, il suffit de substituer les valeurs appropriées. Par exemple, pour suivre le colis 367847964498 via SF Express, l'URL devient : http://www.kuaidi100.com/query?type=shunfeng&postid=367847964498

Après avoir validé cette URL dans un navigateur pour confirmer son bon fonctionnement, nous pouvons l'intégrer dans notre application C#. Dans un projet Windows Forms, nous allons créer une classe utilitaire pour gérer les requêtes HTTP.


using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace SuiviColisApp
{
    public static class ClientHttp
    {
        public static async Task<string> ExecuterRequeteGetAsync(string url)
        {
            var requete = (HttpWebRequest)WebRequest.Create(url);
            requete.Method = "GET";
            requete.ContentType = "application/json";
            requete.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            requete.Proxy = null;

            using (var reponse = (HttpWebResponse)await requete.GetResponseAsync())
            using (var fluxReponse = reponse.GetResponseStream())
            using (var lecteur = new StreamReader(fluxReponse, Encoding.UTF8))
            {
                return await lecteur.ReadToEndAsync();
            }
        }

        // ... Méthode POST éventuelle
    }
}

Cette classe propose une méthode asynchrone pour les requêtes GET, ce qui est une meilleure pratique pour les appels réseau.

Ensuite, dans le gestionnaire d'événements du bouton de notre fenêtre, nous appelons cette méthode :


private async void btnSuivreColis_Click(object sender, EventArgs e)
{
    string apiUrl = "http://www.kuaidi100.com/query?type=shunfeng&postid=367847964498";
    
    try
    {
        string donneesJson = await ClientHttp.ExecuterRequeteGetAsync(apiUrl);
        // Traitement des données JSON dans 'donneesJson'
        MessageBox.Show("Données reçues : " + donneesJson.Substring(0, 200) + "...");
    }
    catch (Exception ex)
    {
        MessageBox.Show("Erreur lors de la requête : " + ex.Message);
    }
}

L'exécution de ce code affiche une portion de la réponse JSON, confirmant que les données ont été correctement récupérées depuis l'API. L'étape suivante consisterait à désérialiser ce JSON en objets C# pour une manipulation plus aisée des données.

Étiquettes: C# JSON HTTP API REST HttpClient

Publié le 12 juillet à 22h02