Compartir a través de


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 original del producto: Visual Studio
Número de KB original: 307023

Resumen

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

En este artículo se hace referencia a los siguientes espacios de nombres de la 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 Solicitar 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 codificación directa con las API de Windows Internet (WinINet).

En .NET, los System.Net espacios de nombres proporcionan la WebRequest clase para encapsular una solicitud de 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 de una solicitud determinada. Cuando tenga una secuencia, puede leer la respuesta al leer 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 System.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 de 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á 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 objeto WebRequest. Solo puede hacerlo a través del método estático Create de la WebRequest clase (el nuevo objeto WebRequest 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 le permiten especificar la misma información básica que 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 las opciones que ya estaban configuradas 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 .NET Framework V2.0 Obsolete Type/Member List (By Assembly).

  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 la secuencia de respuesta, puede usar la secuencia como usaría cualquier otra secuencia y puede leer el contenido de la línea de secuencia por línea, o incluso todos al mismo tiempo. El siguiente bucle de código de ejemplo lee la secuencia una línea a la vez hasta que el método devuelve null, mediante la ReadLine salida de cada línea a 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 correctamente la información de proxy para su entorno (consulte los pasos 7 y 8). Debería ver líneas de contenido HTML numeradas y mostradas 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();
        }
    }
}