C# | Performing HTTP requests
Creating and sending an HTTP POST request
Section titled “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
Section titled “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)
Section titled “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
Section titled “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)
Section titled “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
Section titled “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>();