How to: Request data by using the WebRequest class

The following procedure describes the steps to request a resource, such as a Web page or a file, from a server. The resource must be identified by a URI.

To request data from a host server

  1. Create a WebRequest instance by calling WebRequest.Create with the URI of a resource. For example:

    WebRequest request = WebRequest.Create("https://docs.microsoft.com");
    
    Dim request as WebRequest = WebRequest.Create("https://docs.microsoft.com")
    

    Note

    The .NET Framework provides protocol-specific classes derived from the WebRequest and WebResponse classes for URIs that begin with http:, https:, ftp:, and file:.

    If you need to set or read protocol-specific properties, you must cast your WebRequest or WebResponse object to a protocol-specific object type. For more information, see Programming pluggable protocols.

  2. Set any property values that you need in your WebRequest object. For example, to enable authentication, set the WebRequest.Credentials property to an instance of the NetworkCredential class:

    request.Credentials = CredentialCache.DefaultCredentials;
    
    request.Credentials = CredentialCache.DefaultCredentials
    
  3. Send the request to the server by calling WebRequest.GetResponse. This method returns an object containing the server's response. The returned WebResponse object's type is determined by the scheme of the request's URI. For example:

    WebResponse response = request.GetResponse();
    
    Dim response As WebResponse = request.GetResponse()
    
  4. You can access the properties of your WebResponse object or cast it to a protocol-specific instance to read protocol-specific properties.

    For example, to access the HTTP-specific properties of HttpWebResponse, cast your WebResponse object to an HttpWebResponse reference. The following code example shows how to display the HTTP-specific HttpWebResponse.StatusDescription property sent with a response:

    Console.WriteLine (((HttpWebResponse)response).StatusDescription);
    
    Console.WriteLine(CType(response,HttpWebResponse).StatusDescription)
    
  5. To get the stream containing response data sent by the server, call the WebResponse.GetResponseStream method. For example:

    Stream dataStream = response.GetResponseStream();
    
    Dim dataStream As Stream = response.GetResponseStream()
    
  6. After you've read the data from the response object, either close it with the WebResponse.Close method or close the response stream with the Stream.Close method. If you don't close either the response object or the stream, your application can run out of server connections and become unable to process additional requests. Because the WebResponse.Close method calls Stream.Close when it closes the response, it's not necessary to call Close on both the response and stream objects, although doing so isn't harmful. For example:

    response.Close();
    
    response.Close()
    

Example

The following code example shows how to create a request to a web server and read the data in its response:

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

namespace Examples.System.Net
{
    public class WebRequestGetExample
    {
        public static void Main()
        {
            // Create a request for the URL.
            WebRequest request = WebRequest.Create(
              "https://docs.microsoft.com");
            // If required by the server, set the credentials.
            request.Credentials = CredentialCache.DefaultCredentials;

            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);

            // Get the stream containing content returned by the server.
            // The using block ensures the stream is automatically closed.
            using (Stream 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);
            }

            // Close the response.
            response.Close();
        }
    }
}
Imports System.IO
Imports System.Net

Namespace Examples.System.Net
    Public Class WebRequestGetExample
        Public Shared Sub Main()
            ' Create a request for the URL.   
            Dim request As WebRequest =
              WebRequest.Create("https://docs.microsoft.com")
            ' If required by the server, set the credentials.  
            request.Credentials = CredentialCache.DefaultCredentials

            ' 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. 
            ' The using block ensures the stream is automatically closed.
            Using dataStream As Stream = 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)
            End Using

            ' Clean up the response.
            response.Close()
        End Sub
    End Class
End Namespace

See also