Uso de Visual C# para realizar una solicitud GET

En este artículo se describe cómo realizar una GET solicitud para recuperar una página web de Internet mediante Visual C#.

Versión del producto original: Visual Studio
Número de KB original: 307023

Resumen

Microsoft .NET Framework incluye muchas clases útiles para redes, incluida la capacidad de realizar solicitudes web.

En este artículo se hace referencia a los siguientes espacios de nombres de biblioteca de clases de .NET Framework:

  • System.Net
  • System.IO

Requisitos

En la lista siguiente se describen el hardware y el software recomendados que necesita:

  • Windows
  • Visual Studio

Nota:

Si está detrás de un servidor proxy, debe tener una dirección web interna o valores de proxy estáticos (consulte los pasos 5 y 6 de la sección Solicitud de una página web ) para probar el código de este artículo.

Solicitud de una página web

La capacidad de recuperar una página web mediante programación tiene muchos usos. Esta capacidad se proporcionó a los programadores de Visual Basic a través del control de transferencia de Internet o a través de la codificación directa en las API de Windows Internet (WinINet).

En .NET, los System.Net espacios de nombres proporcionan la WebRequest clase para encapsular una solicitud para un recurso de Internet y la WebResponse clase para representar los datos que se devuelven.

Mediante el uso de estos objetos, puede obtener una secuencia que represente la respuesta para una solicitud determinada. Cuando tiene una secuencia, puede leer la respuesta tal como se lee desde un archivo de texto local o desde cualquier otro origen.

Para realizar una GET solicitud, siga estos pasos:

  1. Inicie Visual Studio.

  2. Cree una nueva aplicación de consola en Visual C#. Visual Studio crea automáticamente una clase pública y un método vacío Main .

  3. Compruebe que el proyecto hace referencia al menos aSystem.dll.

  4. Use la directiva using en el System espacio de nombres, el System.NET espacio de nombres y el System.IO espacio de nombres (para los objetos stream) para que no tenga que calificar las declaraciones de estos espacios de nombres más adelante en el código. Estas instrucciones deben usarse antes que cualquier otra declaración.

    using System;
    using System.Net;
    using System.IO;
    
  5. En este ejemplo, codifique de forma rígida la dirección URL como una variable. En un sistema real, probablemente recibiría este valor como parámetro para una función o como argumento de línea de comandos para una aplicación de consola.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Cree un nuevo WebRequest objeto. Esto solo se puede hacer a través del método estático Create de la WebRequest clase (nuevo un WebRequest objeto no es válido). Proporcione la dirección URL de destino como parte de la llamada a Create para inicializar el objeto que tiene este valor.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Si desea solicitar direcciones URL fuera de la red local y está detrás de un proxy, debe crear un WebProxy objeto y, a continuación, proporcionar este objeto al WebRequest objeto. El WebProxy objeto tiene una variedad de propiedades, que no se establecen en el código de ejemplo siguiente, que permiten especificar la misma información básica que se puede establecer a través de la configuración de proxy en Internet Explorer.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Si desea usar la configuración que ya se ha configurado en Internet Explorer, puede usar el GetDefaultProxy método estático de la WebProxy clase .

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Nota:

    En Visual Studio 2005 o Visual Studio 2008, el GetDefaultProxy método funciona. Sin embargo, este método ha quedado en desuso. Para obtener más información sobre el GetDefaultProxy método en .NET Framework 2.0, vea Lista de miembros o tipos obsoletos de .NET Framework V2.0 (por ensamblado).

  9. Cuando haya completado la configuración de la solicitud estableciendo la dirección URL de destino y proporcionando cualquier información de proxy aplicable, puede usar la solicitud para obtener un Stream objeto que corresponda a la respuesta de la solicitud.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. Cuando tenga el flujo de respuesta, puede usar la secuencia como usaría cualquier otra secuencia y puede leer el contenido de la secuencia línea por línea, o incluso todo al mismo tiempo. El siguiente bucle de código de ejemplo lee la secuencia de una línea a la vez hasta que el ReadLine método devuelve null, generando cada línea en la consola.

    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. Guarde y ejecute el programa. Compruebe que ha configurado la información del proxy correctamente para su entorno (consulte los pasos 7 y 8). Debería ver líneas de contenido HTML numeradas y salidas en la consola.

Lista de código completa

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();
        }
    }
}