Cómo solicitar datos mediante la clase WebRequestHow to: Request Data Using the WebRequest Class

En el procedimiento siguiente se describen los pasos usados para solicitar un recurso de un servidor, por ejemplo, una página web o un archivo.The following procedure describes the steps used to request a resource from a server, for example, a Web page or file. El recurso debe ser identificado por un identificador URI.The resource must be identified by a URI.

Para solicitar datos de un servidor de hostTo request data from a host server

  1. Cree una instancia WebRequest llamando a Create con el URI del recurso.Create a WebRequest instance by calling Create with the URI of the resource.

    WebRequest request = WebRequest.Create("http://www.contoso.com/");  
    
    Dim request as WebRequest = WebRequest.Create("http://www.contoso.com/")  
    

    Nota

    .NET Framework proporciona clases específicas de protocolo derivadas de WebRequest y WebResponse para identificadores URI que empiezan por "http:", "https:", "ftp:" y "file:".The .NET Framework provides protocol-specific classes derived from WebRequest and WebResponse for URIs that begin with "http:", "https:'', "ftp:", and "file:". Para obtener acceso a recursos con otros protocolos, debe implementar clases específicas de protocolo que se deriven de WebRequest y WebResponse.To access resources using other protocols, you must implement protocol-specific classes that derive from WebRequest and WebResponse. Para obtener más información, vea Programming Pluggable Protocols (Programar protocolos acoplables).For more information, see Programming Pluggable Protocols .

  2. Establezca los valores de propiedad que sean necesarios en WebRequest.Set any property values that you need in the WebRequest. Por ejemplo, para habilitar la autenticación, establezca la propiedad Credentials en una instancia de la clase NetworkCredential.For example, to enable authentication, set the Credentials property to an instance of the NetworkCredential class.

    request.Credentials = CredentialCache.DefaultCredentials;  
    
    request.Credentials = CredentialCache.DefaultCredentials  
    

    En la mayoría de los casos, la clase WebRequest es suficiente para recibir datos.In most cases, the WebRequest class is sufficient to receive data. En cambio, si necesita establecer propiedades específicas de protocolo, convierta WebRequest al tipo específico de protocolo.However, if you need to set protocol-specific properties, you must cast the WebRequest to the protocol-specific type. Por ejemplo, para obtener acceso a las propiedades de HttpWebRequest específicas de HTTP, convierta WebRequest en una referencia HttpWebRequest.For example, to access the HTTP-specific properties of HttpWebRequest, cast the WebRequest to an HttpWebRequest reference. En el siguiente ejemplo de código se muestra cómo se establece la propiedad UserAgent específica de HTTP.The following code example shows how to set the HTTP-specific UserAgent property.

    ((HttpWebRequest)request).UserAgent = ".NET Framework Example Client";  
    
    Ctype(request,HttpWebRequest).UserAgent = ".NET Framework Example Client"  
    
  3. Para enviar la solicitud al servidor, llame a GetResponse.To send the request to the server, call GetResponse. El esquema de URI solicitado determina el tipo real del objeto devuelto de WebResponse.The actual type of the returned WebResponse object is determined by the scheme of the requested URI.

    WebResponse response = request.GetResponse();  
    
    Dim response As WebResponse = request.GetResponse()  
    

    Nota

    Cuando haya acabado de usar un objeto WebResponse, debe cerrarlo llamando al método Close.After you are finished with a WebResponse object, you must close it by calling the Close method. De manera alternativa, si ha obtenido la secuencia de respuesta del objeto de respuesta, puede cerrar la secuencia llamando al método Stream.Close.Alternatively, if you have gotten the response stream from the response object, you can close the stream by calling the Stream.Close method. Si no cierra la respuesta o la secuencia, la aplicación se quedará sin conexiones con el servidor y no podrá procesar más solicitudes.If you do not close either the response or the stream, your application can run out of connections to the server and become unable to process additional requests.

  4. Puede obtener acceso a las propiedades de WebResponse o convertir WebResponse en una instancia específica de protocolo para leer propiedades específicas de protocolo.You can access the properties of the WebResponse or cast the WebResponse to a protocol-specific instance to read protocol-specific properties. Por ejemplo, para obtener acceso a las propiedades de HttpWebResponse específicas de HTTP, convierta WebResponse en una referencia HttpWebResponse.For example, to access the HTTP-specific properties of HttpWebResponse, cast the WebResponse to a HttpWebResponse reference. En el ejemplo de código siguiente se muestra cómo mostrar la información de estado enviada con una respuesta.The following code example shows how to display the status information sent with a response.

    Console.WriteLine (((HttpWebResponse)response).StatusDescription);  
    
    Console.WriteLine(CType(response,HttpWebResponse).StatusDescription)  
    
  5. Para obtener la secuencia que contiene los datos de respuesta enviados por el servidor, use el método GetResponseStream de WebResponse.To get the stream containing response data sent by the server, use the GetResponseStream method of the WebResponse.

    Stream dataStream = response.GetResponseStream();  
    
    Dim dataStream As Stream = response.GetResponseStream()  
    
  6. Después de leer los datos de la respuesta, debe cerrar la secuencia de respuesta usando el método Stream.Close o cerrar la respuesta usando el método WebResponse.Close.After reading the data from the response, you must either close the response stream using the Stream.Close method or close the response using the WebResponse.Close method. No es necesario llamar al método Close en la secuencia de respuesta ni en WebResponse, pero, si lo hace, no se producirán problemas.It is not necessary to call the Close method on both the response stream and the WebResponse, but doing so is not harmful. WebResponse.Close llama a Stream.Close al cerrar la respuesta.WebResponse.Close calls Stream.Close when closing the response.

    response.Close();  
    
    response.Close()  
    

EjemploExample

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

namespace Examples.System.Net  
{  
    public class WebRequestGetExample  
    {  
        public static void Main()  
        {  
            // Create a request for the URL.   
            WebRequest request = WebRequest.Create(  
              "http://www.contoso.com/default.html");  
            // If required by the server, set the credentials.  
            request.Credentials = CredentialCache.DefaultCredentials;  
            // Get the response.  
            WebResponse response = request.GetResponse();  
            // Display the status.  
            Console.WriteLine (((HttpWebResponse)response).StatusDescription);  
            // Get the stream containing content returned by the server.  
            Stream dataStream = response.GetResponseStream();  
            // Open the stream using a StreamReader for easy access.  
            StreamReader reader = new StreamReader(dataStream);  
            // Read the content.  
            string responseFromServer = reader.ReadToEnd();  
            // Display the content.  
            Console.WriteLine(responseFromServer);  
            // Clean up the streams and the response.  
            reader.Close();  
            response.Close();  
        }  
    }  
}  
Imports System  
Imports System.IO  
Imports System.Net  
Imports System.Text  
Namespace Examples.System.Net  
    Public Class WebRequestGetExample  

        Public Shared Sub Main()  
            ' Create a request for the URL.   
            Dim request As WebRequest = _  
              WebRequest.Create("http://www.contoso.com/default.html")  
            ' If required by the server, set the credentials.  
            request.Credentials = CredentialCache.DefaultCredentials  
            ' Get the response.  
            Dim response As WebResponse = request.GetResponse()  
            ' Display the status.  
            Console.WriteLine(CType(response,HttpWebResponse).StatusDescription)  
            ' Get the stream containing content returned by the server.  
            Dim dataStream As Stream = response.GetResponseStream()  
            ' Open the stream using a StreamReader for easy access.  
            Dim reader As New StreamReader(dataStream)  
            ' Read the content.  
            Dim responseFromServer As String = reader.ReadToEnd()  
            ' Display the content.  
            Console.WriteLine(responseFromServer)  
            ' Clean up the streams and the response.  
            reader.Close()  
            response.Close()  
        End Sub   
    End Class   
End Namespace  

Vea tambiénSee Also

Creación de solicitudes de InternetCreating Internet Requests
Uso de secuencias en la redUsing Streams on the Network
Acceso a Internet a través de un proxyAccessing the Internet Through a Proxy
Solicitud de datosRequesting Data
Cómo enviar datos mediante la clase WebRequestHow to: Send Data Using the WebRequest Class