Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make an HTTP POST web request

Canonical
How can I make an HTTP request and send some data using the POST method?

I can do a GET request, but I have no idea of how to make a POST request.

like image 621
Hooch Avatar asked Oct 25 '10 14:10

Hooch


People also ask

How do I send a web request in C#?

C# GET request with HttpClient HttpClient provides a base class for sending HTTP requests and receiving HTTP responses from a resource identified by a URI. using var client = new HttpClient(); var content = await client. GetStringAsync("http://webcode.me"); Console. WriteLine(content);

Can I make a POST request in browser?

You cannot make a POST request by using a web browser, as web browsers only directly support GET requests.


2 Answers

There are several ways to perform HTTP GET and POST requests:


Method A: HttpClient (Preferred)

Available in: .NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+ .

It is currently the preferred approach, and is asynchronous and high performance. Use the built-in version in most cases, but for very old platforms there is a NuGet package.

using System.Net.Http; 

Setup

It is recommended to instantiate one HttpClient for your application's lifetime and share it unless you have a specific reason not to.

private static readonly HttpClient client = new HttpClient(); 

See HttpClientFactory for a dependency injection solution.


  • POST

      var values = new Dictionary<string, string>   {       { "thing1", "hello" },       { "thing2", "world" }   };    var content = new FormUrlEncodedContent(values);    var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);    var responseString = await response.Content.ReadAsStringAsync(); 
  • GET

      var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx"); 

Method B: Third-Party Libraries

RestSharp

  • POST

       var client = new RestClient("http://example.com");    // client.Authenticator = new HttpBasicAuthenticator(username, password);    var request = new RestRequest("resource/{id}");    request.AddParameter("thing1", "Hello");    request.AddParameter("thing2", "world");    request.AddHeader("header", "value");    request.AddFile("file", path);    var response = client.Post(request);    var content = response.Content; // Raw content as string    var response2 = client.Post<Person>(request);    var name = response2.Data.Name; 

Flurl.Http

It is a newer library sporting a fluent API, testing helpers, uses HttpClient under the hood, and is portable. It is available via NuGet.

    using Flurl.Http; 

  • POST

      var responseString = await "http://www.example.com/recepticle.aspx"       .PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })       .ReceiveString(); 
  • GET

      var responseString = await "http://www.example.com/recepticle.aspx"       .GetStringAsync(); 

Method C: HttpWebRequest (not recommended for new work)

Available in: .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0+. In .NET Core, it is mostly for compatibility -- it wraps HttpClient, is less performant, and won't get new features.

using System.Net; using System.Text;  // For class Encoding using System.IO;    // For StreamReader 

  • POST

      var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");    var postData = "thing1=" + Uri.EscapeDataString("hello");       postData += "&thing2=" + Uri.EscapeDataString("world");   var data = Encoding.ASCII.GetBytes(postData);    request.Method = "POST";   request.ContentType = "application/x-www-form-urlencoded";   request.ContentLength = data.Length;    using (var stream = request.GetRequestStream())   {       stream.Write(data, 0, data.Length);   }    var response = (HttpWebResponse)request.GetResponse();    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
  • GET

      var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");    var response = (HttpWebResponse)request.GetResponse();    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

Method D: WebClient (Not recommended for new work)

This is a wrapper around HttpWebRequest. Compare with HttpClient.

Available in: .NET Framework 1.1+, NET Standard 2.0+, .NET Core 2.0+.

In some circumstances (.NET Framework 4.5-4.8), if you need to do a http request synchronously, WebClient can still be used.

using System.Net; using System.Collections.Specialized; 

  • POST

      using (var client = new WebClient())   {       var values = new NameValueCollection();       values["thing1"] = "hello";       values["thing2"] = "world";        var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);        var responseString = Encoding.Default.GetString(response);   } 
  • GET

      using (var client = new WebClient())   {       var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");   } 
like image 127
35 revs, 24 users 34% Avatar answered Sep 29 '22 09:09

35 revs, 24 users 34%


Simple GET request

using System.Net;  ...  using (var wb = new WebClient()) {     var response = wb.DownloadString(url); } 

Simple POST request

using System.Net; using System.Collections.Specialized;  ...  using (var wb = new WebClient()) {     var data = new NameValueCollection();     data["username"] = "myUser";     data["password"] = "myPassword";      var response = wb.UploadValues(url, "POST", data);     string responseInString = Encoding.UTF8.GetString(response); } 
like image 42
Pavlo Neiman Avatar answered Sep 29 '22 09:09

Pavlo Neiman