Usando o Visual C# para fazer uma solicitação GET

Este artigo descreve como fazer uma solicitação GET para recuperar uma página da Web da Internet usando o Visual C#.

Versão original do produto: Visual Studio
Número de KB original: 307023

Resumo

O microsoft .NET Framework inclui muitas classes úteis para rede, incluindo a capacidade de fazer solicitações da Web.

Este artigo refere-se aos seguintes namespaces da Biblioteca de Classes .NET Framework:

  • System.Net
  • System.IO

Requisitos

A lista a seguir descreve o hardware e o software recomendados que você precisa:

  • Windows
  • Visual Studio

Observação

Se você estiver por trás de um servidor proxy, deverá ter um endereço Web interno ou valores de proxy estáticos (confira as etapas 5 e 6 da seção Solicitar uma página da Web ) para testar o código neste artigo.

Solicitar uma página da Web

A capacidade de recuperar uma página da Web programaticamente tem muitos usos. Essa capacidade foi fornecida aos programadores do Visual Basic por meio do Controle de Transferência da Internet ou por meio da codificação direta nas APIs wininet (Internet do Windows).

No .NET, os System.Net namespaces fornecem a WebRequest classe para encapsular uma solicitação de um recurso da Internet e a WebResponse classe para representar os dados retornados.

Usando esses objetos, você pode obter um fluxo que representa a resposta para uma solicitação específica. Quando você tem um fluxo, você pode ler a resposta assim que ler de um arquivo de texto local ou de qualquer outra fonte.

Para fazer uma solicitação GET , siga estas etapas:

  1. Inicie o Visual Studio.

  2. Crie um novo aplicativo de console no Visual C#. O Visual Studio cria automaticamente uma classe pública e um método vazio Main .

  3. Verifique se o projeto faz referência pelo menos System.dll.

  4. Use a diretiva de uso no System namespace, no System.NET namespace e no System.IO namespace (para os objetos de fluxo) para que você não precise qualificar declarações desses namespaces posteriormente em seu código. Essas instruções devem ser usadas antes de qualquer outra declaração.

    using System;
    using System.Net;
    using System.IO;
    
  5. Para este exemplo, código rígido da URL como uma variável. Em um sistema real, você provavelmente receberia esse valor como um parâmetro para uma função ou como um argumento de linha de comando para um aplicativo de console.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Crie um novo WebRequest objeto. Você só pode fazer isso por meio do método estático Create da WebRequest classe (novoWebRequest objeto não é válido). Forneça a URL de destino como parte da chamada para Create inicializar o objeto que tem esse valor.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Se você quiser solicitar URLs fora da rede local e estiver por trás de um proxy, crie um WebProxy objeto e forneça esse objeto ao objeto WebRequest . O WebProxy objeto tem uma variedade de propriedades, que não estão definidas no código de exemplo abaixo, que permitem especificar as mesmas informações básicas que você pode definir por meio das configurações de proxy na Internet Explorer.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Se você quiser usar as configurações que já estavam configuradas na Internet Explorer, poderá usar o GetDefaultProxy método estático da WebProxy classe.

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Observação

    No Visual Studio 2005 ou No Visual Studio 2008, o GetDefaultProxy método funciona. No entanto, esse método foi preterido. Para obter mais informações sobre o GetDefaultProxy método no .NET Framework 2.0, consulte .NET Framework V2.0 Obsolete Type/Member List (By Assembly).

  9. Quando você tiver concluído a configuração de sua solicitação definindo a URL de destino e dando qualquer informação de proxy aplicável, você pode usar sua solicitação para obter um Stream objeto que corresponda à resposta para sua solicitação.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. Quando você tem o fluxo de resposta, pode usar o fluxo como usaria qualquer outro fluxo e pode ler o conteúdo da linha de fluxo por linha ou até mesmo tudo ao mesmo tempo. O loop de código de exemplo a seguir lê o fluxo de uma linha de cada vez até que o ReadLine método retorne nulo, gerando cada linha para o console.

    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. Salve e execute seu programa. Verifique se você configurou as informações de proxy corretamente para seu ambiente (confira as etapas 7 e 8). Você deve ver linhas de conteúdo HTML numeradas e saídas para o console.

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