# Performing HTTP requests
# Creating and sending an HTTP POST request
using System.Net;
using System.IO;
...
string requestUrl = "https://www.example.com/submit.html";
HttpWebRequest request = HttpWebRequest.CreateHttp(requestUrl);
request.Method = "POST";
// Optionally, set properties of the HttpWebRequest, such as:
request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
request.ContentType = "application/x-www-form-urlencoded";
// Could also set other HTTP headers such as Request.UserAgent, Request.Referer,
// Request.Accept, or other headers via the Request.Headers collection.
// Set the POST request body data. In this example, the POST data is in
// application/x-www-form-urlencoded format.
string postData = "myparam1=myvalue1&myparam2=myvalue2";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(postData);
}
// Submit the request, and get the response body from the remote server.
string responseFromRemoteServer;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
responseFromRemoteServer = reader.ReadToEnd();
}
}
# Creating and sending an HTTP GET request
using System.Net;
using System.IO;
...
string requestUrl = "https://www.example.com/page.html";
HttpWebRequest request = HttpWebRequest.CreateHttp(requestUrl);
// Optionally, set properties of the HttpWebRequest, such as:
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.Timeout = 2 * 60 * 1000; // 2 minutes, in milliseconds
// Submit the request, and get the response body.
string responseBodyFromRemoteServer;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
responseBodyFromRemoteServer = reader.ReadToEnd();
}
}
# Error handling of specific HTTP response codes (such as 404 Not Found)
using System.Net;
...
string serverResponse;
try
{
// Call a method that performs an HTTP request (per the above examples).
serverResponse = PerformHttpRequest();
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError)
{
HttpWebResponse response = ex.Response as HttpWebResponse;
if (response != null)
{
if ((int)response.StatusCode == 404) // Not Found
{
// Handle the 404 Not Found error
// ...
}
else
{
// Could handle other response.StatusCode values here.
// ...
}
}
}
else
{
// Could handle other error conditions here, such as WebExceptionStatus.ConnectFailure.
// ...
}
}
# Sending asynchronous HTTP POST request with JSON body
public static async Task PostAsync(this Uri uri, object value)
{
var content = new ObjectContext(value.GetType(), value, new JsonMediaTypeFormatter());
using (var client = new HttpClient())
{
return await client.PostAsync(uri, content);
}
}
. . .
var uri = new Uri("http://stackoverflow.com/documentation/c%23/1971/performing-http-requests");
await uri.PostAsync(new { foo = 123.45, bar = "Richard Feynman" });
# Retrieve HTML for Web Page (Simple)
string contents = "";
string url = "http://msdn.microsoft.com";
using (System.Net.WebClient client = new System.Net.WebClient())
{
contents = client.DownloadString(url);
}
Console.WriteLine(contents);
# Sending asynchronous HTTP GET request and reading JSON request
public static async Task<TResult> GetAnsync<TResult>(this Uri uri)
{
using (var client = new HttpClient())
{
var message = await client.GetAsync(uri);
if (!message.IsSuccessStatusCode)
throw new Exception();
return message.ReadAsAsync<TResult>();
}
}
. . .
public class Result
{
public double foo { get; set; }
public string bar { get; set; }
}
var uri = new Uri("http://stackoverflow.com/documentation/c%23/1971/performing-http-requests");
var result = await uri.GetAsync<Result>();