Cómo enviar datos mediante la clase WebRequestHow to: Send Data Using the WebRequest Class

En el procedimiento siguiente se describen los pasos que se llevan a cabo para enviar datos a un servidor.The following procedure describes the steps used to send data to a server. Este procedimiento se suele usar para publicar datos en una página web.This procedure is commonly used to post data to a Web page.

Para enviar datos a un servidor hostTo send data to a host server

  1. Cree una instancia WebRequest llamando a Create con el URI del recurso que acepte datos, como un script o una página ASP.NET.Create a WebRequest instance by calling Create with the URI of the resource that accepts data, for example, a script or ASP.NET page.

    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 instancia WebRequest es suficiente para enviar datos.In most cases, the WebRequest instance itself is sufficient to send 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. Especifique un método de protocolo que permita que se envíen datos con una solicitud, como el método POST de HTTP.Specify a protocol method that permits data to be sent with a request, such as the HTTP POST method.

    request.Method = "POST";  
    
    request.Method = "POST"  
    
  4. Establezca la propiedad ContentLength.Set the ContentLength property.

    request.ContentLength = byteArray.Length;  
    
    request.ContentLength = byteArray.Length  
    
  5. Establezca la propiedad ContentType en un valor adecuado.Set the ContentType property to an appropriate value.

    request.ContentType = "application/x-www-form-urlencoded";  
    
    request.ContentType = "application/x-www-form-urlencoded"  
    
  6. Obtenga la secuencia que contiene los datos de la solicitud llamando al método GetRequestStream.Get the stream that holds request data by calling the GetRequestStream method.

    Stream dataStream = request.GetRequestStream ();  
    
    Stream dataStream = request.GetRequestStream ()  
    
  7. Escriba los datos en el objeto Stream que devuelve este método.Write the data to the Stream object returned by this method.

    dataStream.Write (byteArray, 0, byteArray.Length);  
    
    dataStream.Write (byteArray, 0, byteArray.Length)  
    
  8. Cierre la secuencia de la solicitud llamando al método Stream.Close.Close the request stream by calling the Stream.Close method.

    dataStream.Close ();  
    
    dataStream.Close ()  
    
  9. Envíe la solicitud al servidor llamando a GetResponse.Send the request to the server by calling GetResponse. Este método devuelve un objeto que contiene la respuesta del servidor.This method returns an object containing the server's response. El tipo del objeto WebResponse devuelto se determina mediante el esquema del URI de la solicitud.The returned WebResponse object's type is determined by the scheme of the request's 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 the response or the stream, your application can run out of connections to the server and become unable to process additional requests.

  10. 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 an HttpWebResponse reference.

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

    Stream data = response.GetResponseStream;  
    
    Dim data As Stream = response.GetResponseStream  
    
  12. 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.

    response.Close();  
    
    response.Close()  
    

EjemploExample

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

namespace Examples.System.Net  
{  
    public class WebRequestPostExample  
    {  
        public static void Main ()  
        {  
            // Create a request using a URL that can receive a post.   
            WebRequest request = WebRequest.Create ("http://www.contoso.com/PostAccepter.aspx ");  
            // Set the Method property of the request to POST.  
            request.Method = "POST";  
            // Create POST data and convert it to a byte array.  
            string postData = "This is a test that posts this string to a Web server.";  
            byte[] byteArray = Encoding.UTF8.GetBytes (postData);  
            // Set the ContentType property of the WebRequest.  
            request.ContentType = "application/x-www-form-urlencoded";  
            // Set the ContentLength property of the WebRequest.  
            request.ContentLength = byteArray.Length;  
            // Get the request stream.  
            Stream dataStream = request.GetRequestStream ();  
            // Write the data to the request stream.  
            dataStream.Write (byteArray, 0, byteArray.Length);  
            // Close the Stream object.  
            dataStream.Close ();  
            // Get the response.  
            WebResponse response = request.GetResponse ();  
            // Display the status.  
            Console.WriteLine (((HttpWebResponse)response).StatusDescription);  
            // Get the stream containing content returned by the server.  
            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.  
            reader.Close ();  
            dataStream.Close ();  
            response.Close ();  
        }  
    }  
}  
Imports System  
Imports System.IO  
Imports System.Net  
Imports System.Text  
Namespace Examples.System.Net  
    Public Class WebRequestPostExample  

        Public Shared Sub Main()  
            ' Create a request using a URL that can receive a post.   
            Dim request As WebRequest = WebRequest.Create("http://www.contoso.com/PostAccepter.aspx ")  
            ' Set the Method property of the request to POST.  
            request.Method = "POST"  
            ' Create POST data and convert it to a byte array.  
            Dim postData As String = "This is a test that posts this string to a Web server."  
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)  
            ' Set the ContentType property of the WebRequest.  
            request.ContentType = "application/x-www-form-urlencoded"  
            ' Set the ContentLength property of the WebRequest.  
            request.ContentLength = byteArray.Length  
            ' Get the request stream.  
            Dim dataStream As Stream = request.GetRequestStream()  
            ' Write the data to the request stream.  
            dataStream.Write(byteArray, 0, byteArray.Length)  
            ' Close the Stream object.  
            dataStream.Close()  
            ' 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.  
            dataStream = 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.  
            reader.Close()  
            dataStream.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 solicitar datos mediante la clase WebRequestHow to: Request Data Using the WebRequest Class