Uso di Visual C# per effettuare una richiesta GET

Questo articolo descrive come effettuare una GET richiesta di recupero di una pagina Web da Internet tramite Visual C#.

Versione originale del prodotto: Visual Studio
Numero KB originale: 307023

Riepilogo

Microsoft .NET Framework include molte classi utili per la rete, inclusa la possibilità di effettuare richieste Web.

Questo articolo fa riferimento agli spazi dei nomi della libreria di classi .NET Framework seguenti:

  • System.Net
  • System.IO

Requisiti

L'elenco seguente descrive l'hardware e il software consigliati necessari:

  • Windows
  • Visual Studio

Nota

Se si è dietro un server proxy, è necessario disporre di un indirizzo Web interno o di valori proxy statici (vedere i passaggi 5 e 6 della sezione Richiedere una pagina Web ) per testare il codice in questo articolo.

Richiedere una pagina Web

La possibilità di recuperare una pagina Web a livello di codice ha molti usi. Questa funzionalità è stata fornita ai programmatori di Visual Basic tramite Il controllo di trasferimento Internet o tramite codifica diretta sulle API Windows Internet (WinINet).

In .NET gli System.Net spazi dei nomi forniscono la WebRequest classe per incapsulare una richiesta per una risorsa Internet e la WebResponse classe per rappresentare i dati restituiti.

Usando questi oggetti, è possibile ottenere un flusso che rappresenta la risposta per una richiesta specifica. Quando si dispone di un flusso, è possibile leggere la risposta esattamente come si legge da un file di testo locale o da qualsiasi altra origine.

Per effettuare una GET richiesta, seguire questa procedura:

  1. Avviare Visual Studio.

  2. Creare una nuova applicazione console in Visual C#. Visual Studio crea automaticamente una classe pubblica e un metodo vuoto Main .

  3. Verificare che il progetto faccia riferimento almeno System.dll.

  4. Usare la direttiva using per lo System spazio dei nomi, lo System.NET spazio dei nomi e lo System.IO spazio dei nomi (per gli oggetti di flusso) in modo che non sia necessario qualificare le dichiarazioni da questi spazi dei nomi più avanti nel codice. Queste istruzioni devono essere usate prima di qualsiasi altra dichiarazione.

    using System;
    using System.Net;
    using System.IO;
    
  5. Per questo esempio, impostare come hardcoded l'URL come variabile. In un sistema reale è probabile che questo valore venga ricevuto come parametro per una funzione o come argomento della riga di comando per un'applicazione console.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Creare un nuovo WebRequest oggetto. È possibile eseguire questa operazione solo tramite il metodo statico Create della WebRequest classe (nuovoWebRequest oggetto non valido). Specificare l'URL di destinazione come parte della chiamata a per Create inizializzare l'oggetto con questo valore.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Se si desidera richiedere URL all'esterno della rete locale e si è dietro un proxy, è necessario creare un WebProxy oggetto e quindi fornire questo oggetto all'oggetto WebRequest . L'oggetto WebProxy dispone di un'ampia gamma di proprietà, che non sono impostate nel codice di esempio seguente, che consentono di specificare le stesse informazioni di base che è possibile impostare tramite le impostazioni proxy in Internet Explorer.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Se si vogliono usare le impostazioni già configurate in Internet Explorer, è possibile usare il GetDefaultProxy metodo statico della WebProxy classe .

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Nota

    In Visual Studio 2005 o Visual Studio 2008, il GetDefaultProxy metodo funziona. Tuttavia, questo metodo è stato deprecato. Per altre informazioni sul metodo in .NET Framework 2.0, vedere .NET Framework V2.0 Obsolete Type/Member List (By Assembly).For more information about the GetDefaultProxy method in the .NET Framework 2.0, see .NET Framework V2.0 Obsolete Type/Member List (By Assembly).

  9. Dopo aver completato la configurazione della richiesta impostando l'URL di destinazione e fornendo tutte le informazioni proxy applicabili, è possibile usare la richiesta per ottenere un Stream oggetto corrispondente alla risposta per la richiesta.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. Quando si dispone del flusso di risposta, è possibile usare il flusso come qualsiasi altro flusso ed è possibile leggere il contenuto del flusso riga per riga, o anche tutti contemporaneamente. Il ciclo di codice di esempio seguente legge il flusso una riga alla volta fino a quando il ReadLine metodo non restituisce null, generando ogni riga nella 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. Salvare ed eseguire il programma. Verificare di aver configurato correttamente le informazioni proxy per l'ambiente (vedere i passaggi 7 e 8). Verranno visualizzate righe di contenuto HTML numerato e restituito nella console.

Elenco di codice completo

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