Utilisation de Visual C# pour effectuer une requête GET

Cet article explique comment effectuer une GET demande de récupération d’une page Web à partir d’Internet à l’aide de Visual C#.

Version de produit d’origine : Visual Studio
Numéro de la base de connaissances d’origine : 307023

Résumé

Microsoft .NET Framework inclut de nombreuses classes utiles pour la mise en réseau, y compris la possibilité d’effectuer des requêtes web.

Cet article fait référence aux espaces de noms de bibliothèque de classes .NET Framework suivants :

  • System.Net
  • System.IO

Configuration requise

La liste suivante décrit le matériel et les logiciels recommandés dont vous avez besoin :

  • Windows
  • Visual Studio

Remarque

Si vous êtes derrière un serveur proxy, vous devez disposer d’une adresse web interne ou de valeurs proxy statiques (voir les étapes 5 et 6 de la section Demander une page web ) pour tester le code de cet article.

Demander une page web

La possibilité de récupérer une page Web par programmation a de nombreuses utilisations. Cette fonctionnalité a été fournie aux programmeurs Visual Basic par le biais du contrôle de transfert Internet ou du codage direct sur les API Windows Internet (WinINet).

Dans .NET, les System.Net espaces de noms fournissent la WebRequest classe pour encapsuler une demande pour une ressource Internet, et la WebResponse classe pour représenter les données retournées.

À l’aide de ces objets, vous pouvez obtenir un flux qui représente la réponse d’une requête particulière. Lorsque vous avez un flux, vous pouvez lire la réponse comme vous liez à partir d’un fichier texte local ou de toute autre source.

Pour effectuer une GET demande, procédez comme suit :

  1. Démarrez Visual Studio.

  2. Créez une application console en Visual C#. Visual Studio crée automatiquement une classe publique et une méthode vide Main .

  3. Vérifiez que le projet fait référence au moins System.dll.

  4. Utilisez la directive using sur l’espace System de noms, l’espace System.NET de noms et l’espace System.IO de noms (pour les objets de flux) afin que vous n’ayez pas à qualifier les déclarations de ces espaces de noms plus loin dans votre code. Ces instructions doivent être utilisées avant toute autre déclaration.

    using System;
    using System.Net;
    using System.IO;
    
  5. Pour cet exemple, codez en dur l’URL en tant que variable. Dans un système réel, vous recevrez probablement cette valeur en tant que paramètre d’une fonction ou en tant qu’argument de ligne de commande pour une application console.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Crée un objet WebRequest. Pour ce faire, vous pouvez uniquement utiliser la méthode statique Create de la WebRequest classe (unWebRequest nouvel objet n’est pas valide). Fournissez l’URL cible dans le cadre de l’appel à Create pour initialiser l’objet qui a cette valeur.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Si vous souhaitez demander des URL en dehors du réseau local et que vous êtes derrière un proxy, vous devez créer un WebProxy objet, puis fournir cet objet à votre WebRequest objet. L’objet WebProxy a diverses propriétés, qui ne sont pas définies dans l’exemple de code ci-dessous, qui vous permettent de spécifier les mêmes informations de base que celles que vous pouvez définir via les paramètres de proxy dans Internet Explorer.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Si vous souhaitez utiliser les paramètres déjà configurés dans Internet Explorer, vous pouvez utiliser la GetDefaultProxy méthode statique de la WebProxy classe .

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Remarque

    Dans Visual Studio 2005 ou Visual Studio 2008, la GetDefaultProxy méthode fonctionne. Toutefois, cette méthode a été dépréciée. Pour plus d’informations sur la GetDefaultProxy méthode dans .NET Framework 2.0, consultez .NET Framework V2.0 Obsolète Type/Liste des membres (par assembly) .

  9. Une fois que vous avez terminé la configuration de votre demande en définissant l’URL cible et en fournissant les informations de proxy applicables, vous pouvez utiliser votre demande pour obtenir un Stream objet qui correspond à la réponse de votre demande.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. Lorsque vous avez le flux de réponse, vous pouvez utiliser le flux comme vous le feriez pour n’importe quel autre flux et vous pouvez lire le contenu du flux ligne par ligne, ou même tout en même temps. L’exemple de boucle de code suivant lit le flux une ligne à la fois jusqu’à ce que la ReadLine méthode retourne null, en sortant chaque ligne dans la console.

    StreamReader objReader = new StreamReader(objStream);
    
    string sLine = "";
    int i = 0;
    
    while (sLine != null)
    {
        i++;
        sLine = objReader.ReadLine();
        if (sLine != null)
            Console.WriteLine("{0}:{1}", i, sLine);
    }
    Console.ReadLine();
    
  11. Enregistrez, puis exécutez votre programme. Vérifiez que vous avez correctement configuré les informations de proxy pour votre environnement (voir les étapes 7 et 8). Vous devez voir des lignes de contenu HTML numérotées et sorties dans la console.

Liste complète du code

using System;
using System.Net;
using System.IO;

namespace MakeAGETRequest_charp
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            string sURL;
            sURL = "http://www.contoso.com";

            WebRequest wrGETURL;
            wrGETURL = WebRequest.Create(sURL);

            WebProxy myProxy = new WebProxy("myproxy", 80);
            myProxy.BypassProxyOnLocal = true;

            wrGETURL.Proxy = WebProxy.GetDefaultProxy();

            Stream objStream;
            objStream = wrGETURL.GetResponse().GetResponseStream();

            StreamReader objReader = new StreamReader(objStream);

            string sLine = "";
            int i = 0;

            while (sLine != null)
            {
                i++;
                sLine = objReader.ReadLine();
                if (sLine != null)
                    Console.WriteLine("{0}:{1}", i, sLine);
            }
            Console.ReadLine();
        }
    }
}