Procedura: Inviare dati con la classe WebRequestHow to: Send Data Using the WebRequest Class

La procedura seguente descrive i passaggi usati per inviare dati a un server.The following procedure describes the steps used to send data to a server. Questa procedura viene comunemente usata per pubblicare dati in una pagina Web.This procedure is commonly used to post data to a Web page.

Per inviare dati a un server hostTo send data to a host server

  1. Creare un'istanza di WebRequest chiamando Create con l'URI della risorsa che accetta i dati, ad esempio, uno script o una pagina ASP.NET.Create a WebRequest instance by calling Create with the URI of the resource that accepts data, for example, a script or ASP.NET page.

    WebRequest request = WebRequest.Create("http://www.contoso.com/");  
    
    Dim request as WebRequest = WebRequest.Create("http://www.contoso.com/")  
    

    Nota

    .NET Framework fornisce le classi specifiche del protocollo derivate da WebRequest e WebResponse per gli URI che iniziano con "http:", "https:", "ftp:" e "file:".The .NET Framework provides protocol-specific classes derived from WebRequest and WebResponse for URIs that begin with "http:", "https:'', "ftp:", and "file:". Per accedere alle risorse con altri protocolli, è necessario implementare classi specifiche del protocollo che derivano da WebRequest e WebResponse.To access resources using other protocols, you must implement protocol-specific classes that derive from WebRequest and WebResponse. Per altre informazioni, vedere Programmazione di protocolli di collegamento.For more information, see Programming Pluggable Protocols .

  2. Impostare i valori di proprietà necessari in WebRequest.Set any property values that you need in the WebRequest. Per abilitare l'autenticazione, ad esempio, impostare la proprietà Credentials su un'istanza della classe NetworkCredential.For example, to enable authentication, set the Credentials property to an instance of the NetworkCredential class.

    request.Credentials = CredentialCache.DefaultCredentials;  
    
    request.Credentials = CredentialCache.DefaultCredentials  
    

    Nella maggior parte dei casi, l'istanza stessa di WebRequest è sufficiente per inviare i dati.In most cases, the WebRequest instance itself is sufficient to send data. Tuttavia, se è necessario impostare le proprietà specifiche del protocollo, è necessario eseguire il cast di WebRequest sul tipo specifico del protocollo.However, if you need to set protocol-specific properties, you must cast the WebRequest to the protocol-specific type. Ad esempio, per accedere alle proprietà specifiche di HTTP di HttpWebRequest, eseguire il cast di WebRequest su un riferimento HttpWebRequest.For example, to access the HTTP-specific properties of HttpWebRequest, cast the WebRequest to an HttpWebRequest reference. L'esempio di codice seguente mostra come impostare la proprietà UserAgent specifica di HTTP.The following code example shows how to set the HTTP-specific UserAgent property.

    ((HttpWebRequest)request).UserAgent = ".NET Framework Example Client";  
    
    Ctype(request,HttpWebRequest).UserAgent = ".NET Framework Example Client"  
    
  3. Specificare un metodo di protocollo che consente l'invio dei dati con una richiesta, ad esempio il metodo POST HTTP.Specify a protocol method that permits data to be sent with a request, such as the HTTP POST method.

    request.Method = "POST";  
    
    request.Method = "POST"  
    
  4. Impostare la proprietà ContentLength.Set the ContentLength property.

    request.ContentLength = byteArray.Length;  
    
    request.ContentLength = byteArray.Length  
    
  5. Impostare la proprietà ContentType su un valore appropriato.Set the ContentType property to an appropriate value.

    request.ContentType = "application/x-www-form-urlencoded";  
    
    request.ContentType = "application/x-www-form-urlencoded"  
    
  6. Ottenere il flusso che contiene i dati della richiesta chiamando il metodo GetRequestStream.Get the stream that holds request data by calling the GetRequestStream method.

    Stream dataStream = request.GetRequestStream ();  
    
    Stream dataStream = request.GetRequestStream ()  
    
  7. Scrivere i dati nell'oggetto Stream restituito da questo metodo.Write the data to the Stream object returned by this method.

    dataStream.Write (byteArray, 0, byteArray.Length);  
    
    dataStream.Write (byteArray, 0, byteArray.Length)  
    
  8. Chiudere il flusso della richiesta chiamando il metodo Stream.Close.Close the request stream by calling the Stream.Close method.

    dataStream.Close ();  
    
    dataStream.Close ()  
    
  9. Inviare la richiesta al server chiamando GetResponse.Send the request to the server by calling GetResponse. Questo metodo restituisce un oggetto contenente la risposta del server.This method returns an object containing the server's response. Il tipo dell'oggetto WebResponse restituito viene determinato dallo schema dell'URI della richiesta.The returned WebResponse object's type is determined by the scheme of the request's URI.

    WebResponse response = request.GetResponse();  
    
    Dim response As WebResponse = request.GetResponse()  
    

    Nota

    Dopo aver finito di usare un oggetto WebResponse, è necessario chiuderlo chiamando il metodo Close.After you are finished with a WebResponse object, you must close it by calling the Close method. In alternativa, se è stato usato il flusso di risposta dall'oggetto risposta, è possibile chiudere il flusso tramite la chiamata del metodo Stream.Close.Alternatively, if you have gotten the response stream from the response object, you can close the stream by calling the Stream.Close method. Se non si chiude la risposta o il flusso, l'applicazione può esaurire le connessioni al server e non essere più in grado di elaborare ulteriori richieste.If you do not close the response or the stream, your application can run out of connections to the server and become unable to process additional requests.

  10. È possibile accedere alle proprietà di WebResponse oppure eseguire il cast di WebResponse su un'istanza specifica del protocollo per leggere le proprietà specifiche del protocollo.You can access the properties of the WebResponse or cast the WebResponse to a protocol-specific instance to read protocol-specific properties. Ad esempio, per accedere alle proprietà specifiche di HTTP di HttpWebResponse, eseguire il cast di WebResponse su un riferimento HttpWebResponse.For example, to access the HTTP-specific properties of HttpWebResponse, cast the WebResponse to an HttpWebResponse reference.

    Console.WriteLine (((HttpWebResponse)response).StatusDescription);  
    
    Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)  
    
  11. Per ottenere il flusso contenente i dati di risposta inviati dal server, chiamare il metodo GetResponseStream di WebResponse.To get the stream containing response data sent by the server, call the GetResponseStream method of the WebResponse.

    Stream data = response.GetResponseStream;  
    
    Dim data As Stream = response.GetResponseStream  
    
  12. Dopo la lettura dei dati dalla risposta, è necessario chiudere il flusso di risposta tramite il metodo Stream.Close oppure chiudere la risposta tramite il metodo WebResponse.Close.After reading the data from the response, you must either close the response stream using the Stream.Close method or close the response using the WebResponse.Close method. Non è necessario chiamare il metodo Close sia sul flusso di risposta che su WebResponse, ma non si tratta di un'operazione che può causare danni.It is not necessary to call the Close method on both the response stream and the WebResponse, but doing so is not harmful.

    response.Close();  
    
    response.Close()  
    

EsempioExample

using System;  
using System.IO;  
using System.Net;  
using System.Text;  

namespace Examples.System.Net  
{  
    public class WebRequestPostExample  
    {  
        public static void Main ()  
        {  
            // Create a request using a URL that can receive a post.   
            WebRequest request = WebRequest.Create ("http://www.contoso.com/PostAccepter.aspx ");  
            // Set the Method property of the request to POST.  
            request.Method = "POST";  
            // Create POST data and convert it to a byte array.  
            string postData = "This is a test that posts this string to a Web server.";  
            byte[] byteArray = Encoding.UTF8.GetBytes (postData);  
            // Set the ContentType property of the WebRequest.  
            request.ContentType = "application/x-www-form-urlencoded";  
            // Set the ContentLength property of the WebRequest.  
            request.ContentLength = byteArray.Length;  
            // Get the request stream.  
            Stream dataStream = request.GetRequestStream ();  
            // Write the data to the request stream.  
            dataStream.Write (byteArray, 0, byteArray.Length);  
            // Close the Stream object.  
            dataStream.Close ();  
            // Get the response.  
            WebResponse response = request.GetResponse ();  
            // Display the status.  
            Console.WriteLine (((HttpWebResponse)response).StatusDescription);  
            // Get the stream containing content returned by the server.  
            dataStream = response.GetResponseStream ();  
            // Open the stream using a StreamReader for easy access.  
            StreamReader reader = new StreamReader (dataStream);  
            // Read the content.  
            string responseFromServer = reader.ReadToEnd ();  
            // Display the content.  
            Console.WriteLine (responseFromServer);  
            // Clean up the streams.  
            reader.Close ();  
            dataStream.Close ();  
            response.Close ();  
        }  
    }  
}  
Imports System  
Imports System.IO  
Imports System.Net  
Imports System.Text  
Namespace Examples.System.Net  
    Public Class WebRequestPostExample  

        Public Shared Sub Main()  
            ' Create a request using a URL that can receive a post.   
            Dim request As WebRequest = WebRequest.Create("http://www.contoso.com/PostAccepter.aspx ")  
            ' Set the Method property of the request to POST.  
            request.Method = "POST"  
            ' Create POST data and convert it to a byte array.  
            Dim postData As String = "This is a test that posts this string to a Web server."  
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)  
            ' Set the ContentType property of the WebRequest.  
            request.ContentType = "application/x-www-form-urlencoded"  
            ' Set the ContentLength property of the WebRequest.  
            request.ContentLength = byteArray.Length  
            ' Get the request stream.  
            Dim dataStream As Stream = request.GetRequestStream()  
            ' Write the data to the request stream.  
            dataStream.Write(byteArray, 0, byteArray.Length)  
            ' Close the Stream object.  
            dataStream.Close()  
            ' Get the response.  
            Dim response As WebResponse = request.GetResponse()  
            ' Display the status.  
            Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)  
            ' Get the stream containing content returned by the server.  
            dataStream = response.GetResponseStream()  
            ' Open the stream using a StreamReader for easy access.  
            Dim reader As New StreamReader(dataStream)  
            ' Read the content.  
            Dim responseFromServer As String = reader.ReadToEnd()  
            ' Display the content.  
            Console.WriteLine(responseFromServer)  
            ' Clean up the streams.  
            reader.Close()  
            dataStream.Close()  
            response.Close()  
        End Sub  
    End Class  
End Namespace  

Vedere ancheSee Also

Creazione di richieste InternetCreating Internet Requests
Uso di flussi nella reteUsing Streams on the Network
Accesso a Internet con un proxyAccessing the Internet Through a Proxy
Richiesta di datiRequesting Data
Procedura: Richiedere dati con la classe WebRequestHow to: Request Data Using the WebRequest Class