Downloading a file via HTTP post and HTTP get in C#

Previously, I had written two posts on how to upload files to a web server, one for the case when the size of the HTTP request is small, and the other for the case when the size of the HTTP request is large. How about the downloading of files from a web server? In this post, I shall discuss how to download files from a HTTP server via the System.Net.HttpWebRequest class.

Download a file via HTTP get

Downloading of a file from the web server via HTTP get in C# consists of three main steps:

  1. Construct the HTTP get request to send to the web server.
  2. Send the HTTP request and get the HTTP response from the web server.
  3. Save the contents in the HTTP response to a local file.

Construct the HTTP get request

The following code segment prepares an instance of the System.Net.HttpWebRequest class to download my website logo.

// Construct HTTP request to get the logo
HttpWebRequest httpRequest = (HttpWebRequest)
    WebRequest.Create("http://www.techcoil.com/ph/img/logo.png");
httpRequest.Method = WebRequestMethods.Http.Get;

Send the HTTP request and get the HTTP response from the web server.

// Get back the HTTP response for web server
HttpWebResponse httpResponse 
    = (HttpWebResponse)httpRequest.GetResponse();
Stream httpResponseStream = httpResponse.GetResponseStream();

Save the file to your local disk

// Define buffer and buffer size
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int bytesRead = 0;

// Read from response and write to file
FileStream fileStream = File.Create("techcoil-logo.png");
while ((bytesRead = httpResponseStream.Read(buffer, 0, bufferSize)) != 0) 
{
    fileStream.Write(buffer, 0, bytesRead);
} // end while

Download a file via HTTP post

Sometimes, there is a need for the client to supply some information to the web server in order to download a file. This can be a case when we want to control how files are downloaded. We can refer to every file in our web server with a unique id and write a server script to serve the respective file based on the id received from the client. For the sake of demonstration, I had published a server script, "/poc/downloadPng.php", that will read a post variable labelled as id. If id is 1, it will write my website logo to the client, else it will write my 404 icon image to the client.

As with HTTP get, downloading of a file from the web server via HTTP post in C# consists of three main steps:

  1. Construct the HTTP post request to send to the web server.
  2. Send the HTTP request and get the HTTP response from the web server.
  3. Save the contents in the HTTP response to a local file.

Since step 2 and 3 are identical, I will just discuss step 1.

Construct the HTTP post request to send to the web server.

// Construct HTTP request to get the file
HttpWebRequest httpRequest = (HttpWebRequest)
    WebRequest.Create("http://www.techcoil.com/poc/downloadPng.php");
httpRequest.Method = WebRequestMethods.Http.Post;

// Include post data in the HTTP request
string postData = "id=1";
httpRequest.ContentLength = postData.Length;
httpRequest.ContentType = "application/x-www-form-urlencoded";
// Write the post data to the HTTP request
StreamWriter requestWriter = new StreamWriter(
    httpRequest.GetRequestStream(), 
    System.Text.Encoding.ASCII);
requestWriter.Write(postData);
requestWriter.Close();

Namespaces to include

The following namespaces need to be included in order for the above mentioned codes to compile.

Related posts

About Clivant

Clivant a.k.a Chai Heng enjoys composing software and building systems to serve people. He owns techcoil.com and hopes that whatever he had written and built so far had benefited people. All views expressed belongs to him and are not representative of the company that he works/worked for.