Canonical
Comment puis-je faire une requête HTTP et envoyer des données en utilisant la méthodePOST
** ?
Je sais faire une requête GET
mais je n'ai aucune idée de comment faire une POST
.
Il existe plusieurs façons d'effectuer des requêtes HTTP GET
et POST
:
C'est une enveloppe autour de HttpWebRequest
. Comparez avec WebClient
.
Disponible dans : .NET Framework 4.5+
, .NET Standard 1.1+
, .NET Core 1.0+
.
Actuellement, l'approche privilégiée. Asynchrone. Une version portable pour d'autres plateformes est disponible via [NuGet] (https://www.nuget.org/packages/Microsoft.Net.Http).
using System.Net.Http;
Il est [recommandé][3] d'instancier un seul HttpClient
pour toute la durée de vie de votre application et de le partager.
private static readonly HttpClient client = new HttpClient();
Voir [HttpClientFactory
][2] pour une solution d'injection de dépendances.
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" ;);
Bibliothèque testée et éprouvée pour interagir avec les API REST. Portable. Disponible via [NuGet] (https://www.nuget.org/packages/RestSharp).
Bibliothèque plus récente dotée d'une API fluide et d'outils d'aide aux tests. HttpClient sous le capot. Portable. Disponible via NuGet.
en utilisant 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() ;
Disponible dans : .NET Framework 1.1+',
.NET Standard 2.0+', `.NET Core 1.0+'.
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() ;
C'est une enveloppe autour de HttpWebRequest
. Comparez avec HttpClient
.
Disponible dans : .NET Framework 1.1+',
NET Standard 2.0+', `.NET Core 2.0+'.
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" ;);
}
[2] : https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests#what-is-httpclientfactory [3] : https://docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/
Demande GET simple
using System.Net;
...
using (var wb = new WebClient())
{
var response = wb.DownloadString(url);
}
Demande POST simple
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);
}
[MSDN][1] propose un exemple.
[1] : http://msdn.microsoft.com/en-us/library/debx8sh9.aspx
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Examples.System.Net
{
public class WebRequestPostExample
{
public static void Main()
{
// Create a request using a URL that can receive a post.
WebRequest request = WebRequest.Create("http://www.contoso.com/PostAccepter.aspx");
// Set the Method property of the request to POST.
request.Method = "POST";
// Create POST data and convert it to a byte array.
string postData = "This is a test that posts this string to a Web server.";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = request.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
WebResponse response = request.GetResponse();
// Display the status.
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
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);
// Clean up the streams.
reader.Close();
dataStream.Close();
response.Close();
}
}
}