Ler em inglês

Partilhar via


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

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

Versão original do produto: Visual Studio
Número original do KB: 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 do .NET Framework:

  • System.Net
  • System.IO

Requisitos

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

  • Windows
  • Visual Studio

Nota

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

Solicite 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 de codificação direta nas APIs do Windows Internet (WinINet).

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, pode ler a resposta da mesma forma que lê de um arquivo de texto local ou de qualquer outra fonte.

Para fazer uma GET solicitação, 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 a pelo menos System.dll.

  4. Use a using diretiva 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 declarações devem ser usadas antes de quaisquer outras declarações.

    C#
    using System;
    using System.Net;
    using System.IO;
    
  5. Para este exemplo, codifique a 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.

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

    C#
    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Se você quiser solicitar URLs fora da rede local e estiver atrás de um proxy, deverá criar um WebProxy objeto e, em seguida, fornecer esse objeto ao seu WebRequest objeto. O WebProxy objeto tem uma variedade de propriedades, que não sã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 no Internet Explorer.

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

    C#
    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Nota

    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 Lista de tipos/membros obsoletos (por assembly).

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

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

    C#
    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 (consulte as etapas 7 e 8). Você deve ver linhas de conteúdo HTML numeradas e enviadas para o console.

Listagem de código completo

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