Demande de données
Le développement d'applications qui s'exécutent dans l'environnement d'exploitation distribué que constitue aujourd'hui Internet nécessite une méthode efficace et facile à utiliser pour extraire les données des ressources de tout type. Les protocoles enfichables vous permettent de développer des applications qui utilisent une interface unique pour extraire les données provenant de différents protocoles Internet.
Pour les transactions simples composées d'une demande et d'une réponse, la classe WebClient offre la méthode la plus simple pour télécharger les données vers ou à partir d'un serveur Internet. WebClient fournit des méthodes pour transférer et télécharger des fichiers, envoyer et recevoir des flux, et envoyer une mémoire tampon de données au serveur et recevoir une réponse. Comme WebClient utilise les classes WebRequest et WebResponse pour établir les connexions réelles à la ressource Internet, n'importe quel protocole enfichable inscrit peut être utilisé. L'exemple suivant demande une page Web et retourne les résultats dans un flux.
WebClient myClient = new WebClient();
Stream response = myClient.OpenRead("https://www.contoso.com/index.htm");
// The stream data is used here.
response.Close();
[Visual Basic]
Dim myClient As WebClient = New WebClient()
Dim response As Stream = myClient.OpenRead("https://www.contoso.com/index.htm")
' The stream data is used here.
response.Close()
Les applications clientes qui doivent effectuer des transactions plus complexes demandent les données aux serveurs à l'aide de la classe WebRequest et de ses descendants. WebRequest encapsule les détails de la connexion au serveur, de l'envoi de la demande et de la réception de la réponse. WebRequest est une classe abstraite qui définit un ensemble de propriétés et de méthodes disponibles pour toutes les applications utilisant des protocoles enfichables. Les descendants de WebRequest, comme HttpWebRequest, implémentent les propriétés et les méthodes définies par WebRequest d'une façon cohérente avec le protocole sous-jacent.
La classe WebRequest crée des instances spécifiques aux protocoles des descendants de WebRequest à l'aide de la valeur de l'identificateur URI passé à sa méthode Create, pour déterminer l'instance spécifique et dérivée de la classe qui doit être créée. Les applications indiquent le descendant de WebRequest qui doit être utilisé pour gérer une demande en inscrivant le constructeur du descendant avec la méthode WebRequest.RegisterPrefix.
Une demande est adressée à la ressource Internet en appelant la méthode GetResponse sur WebRequest. La méthode GetResponse construit la demande spécifique au protocole à partir des propriétés de WebRequest, établit la connexion de socket TCP ou UDP au serveur et envoie la demande. Pour les demandes qui envoient des données au serveur, comme les demandes HTTP Post ou FTP Put, la méthode WebRequest.GetRequestStream fournit un flux de réseau pour y envoyer les données.
La méthode GetResponse retourne un WebResponse spécifique au protocole qui correspond à WebRequest, comme le montre l'exemple suivant :
WebRequest req = WebRequest.Create("https://www.contoso.com/");
WebResponse resp = req.GetResponse();
[Visual Basic]
Dim req As WebRequest = WebRequest.Create("https://www.contoso.com")
Dim resp As WebResponse = req.GetResponse()
La classe WebResponse est également une classe abstraite qui définit les propriétés et les méthodes disponibles pour toutes les applications utilisant des protocoles enfichables. Les descendants de WebResponse implémentent ces propriétés et ces méthodes pour le protocole sous-jacent. La classe HttpWebResponse, par exemple, implémente la classe WebResponse pour le protocole HTTP.
Les données retournées par le serveur sont présentées à l'application dans le flux retourné par la méthode WebResponse.GetResponseStream. Vous pouvez utiliser ce flux de la même façon que les autres flux, comme illustré dans l'exemple suivant :
StreamReader sr =
new StreamReader(resp.GetResponseStream(), Encoding.ASCII);
[Visual Basic]
Dim sr As StreamReader
sr = New StreamReader(resp.GetResponseStream(), Encoding.ASCII)