Procedimiento para enviar datos mediante la clase WebRequestHow to: Send data by using the WebRequest class

En el procedimiento siguiente se describen los pasos para enviar datos a un servidor.The following procedure describes the steps 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 mediante una llamada a WebRequest.Create con el URI de un recurso (como un script o una página ASP.NET) que acepte datos.Create a WebRequest instance by calling WebRequest.Create with the URI of a resource, such as a script or ASP.NET page, that accepts data. Por ejemplo:For example:

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

    Nota

    .NET Framework proporciona clases específicas de protocolo derivadas de las clases WebRequest y WebResponse para identificadores URI que empiezan por http: , https: , ftp: y file: .The .NET Framework provides protocol-specific classes derived from the WebRequest and WebResponse classes for URIs that begin with http:, https:, ftp:, and file:. Si necesita establecer o leer propiedades específicas de protocolo, debe convertir el objeto WebRequest o WebResponse a un tipo de objeto específico de protocolo.If you need to set or read protocol-specific properties, you must cast your WebRequest or WebResponse object to a protocol-specific object type. Para obtener más información, vea Programar protocolos acoplables.For more information, see Programming pluggable protocols.

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

    request.Credentials = CredentialCache.DefaultCredentials;  
    
    request.Credentials = CredentialCache.DefaultCredentials  
    
  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 en el número de bytes que incluya con su solicitud.Set the ContentLength property to the number of bytes you're including with your request. Por ejemplo:For example:

    request.ContentLength = byteArray.Length;  
    
    request.ContentLength = byteArray.Length  
    
  5. Establezca la propiedad ContentType en un valor apropiado.Set the ContentType property to an appropriate value. Por ejemplo:For example:

    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. Por ejemplo:For example:

    Stream dataStream = request.GetRequestStream();  
    
    Dim dataStream As Stream = request.GetRequestStream()  
    
  7. Escriba los datos en el objeto Stream que devuelve el método GetRequestStream.Write the data to the Stream object returned by the GetRequestStream method. Por ejemplo:For example:

    dataStream.Write(byteArray, 0, byteArray.Length);  
    
    dataStream.Write(byteArray, 0, byteArray.Length)  
    
  8. Cierre la secuencia de la solicitud mediante una llamada al método Stream.Close.Close the request stream by calling the Stream.Close method. Por ejemplo:For example:

    dataStream.Close();  
    
    dataStream.Close()  
    
  9. Envíe la solicitud al servidor llamando a WebRequest.GetResponse.Send the request to the server by calling WebRequest.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. Por ejemplo:For example:

    WebResponse response = request.GetResponse();  
    
    Dim response As WebResponse = request.GetResponse()  
    
  10. Puede obtener acceso a las propiedades de su objeto WebResponse o convertirlo en una instancia específica de protocolo para leer propiedades específicas de protocolo.You can access the properties of your WebResponse object or cast it 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 el objeto WebResponse en una referencia HttpWebResponse.For example, to access the HTTP-specific properties of HttpWebResponse, cast your WebResponse object to an HttpWebResponse reference. En el ejemplo de código siguiente se indica cómo mostrar la propiedad HttpWebResponse.StatusDescription específica de HTTP enviada con una respuesta:The following code example shows how to display the HTTP-specific HttpWebResponse.StatusDescription property sent with a response:

    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 WebResponse.GetResponseStream del objeto WebResponse.To get the stream containing response data sent by the server, call the WebResponse.GetResponseStream method of your WebResponse object. Por ejemplo:For example:

    Stream dataStream = response.GetResponseStream();  
    
    Dim dataStream As Stream = response.GetResponseStream()  
    
  12. Después de leer los datos del objeto de respuesta, ciérrelo con el método WebResponse.Close o cierre la secuencia de respuesta con el método Stream.Close.After you've read the data from the response object, either close it with the WebResponse.Close method or close the response stream with 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 don't close either the response or the stream, your application can run out of server connections and become unable to process additional requests. Dado que el método WebResponse.Close llama a Stream.Close cuando cierra la respuesta, no es necesario llamar a Close en los objetos de respuesta y de secuencia, aunque hacerlo no causa ningún daño.Because the WebResponse.Close method calls Stream.Close when it closes the response, it's not necessary to call Close on both the response and stream objects, although doing so isn't harmful. Por ejemplo:For example:

    response.Close();  
    
    response.Close()  
    

EjemploExample

En el ejemplo siguiente se muestra cómo enviar datos a un servidor web y cómo leer los datos de la respuesta:The following example shows how to send data to a web server and read the data in its response:

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.  
            // The using block ensures the stream is automatically closed.
            using (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);
            }
            
            // Close the response.  
            response.Close();
        }
    }
}
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.  
            ' The using block ensures the stream is automatically closed.
            Using dataStream1 As Stream = response.GetResponseStream()
                ' Open the stream using a StreamReader for easy access.  
                Dim reader As New StreamReader(dataStream1)
                ' Read the content.  
                Dim responseFromServer As String = reader.ReadToEnd()
                ' Display the content.  
                Console.WriteLine(responseFromServer)
            End Using

            ' Clean up the response.  
            response.Close()
        End Sub
    End Class
End Namespace

Vea tambiénSee also