Saltar al contenido

Cómo hacer una solicitud web HTTP POST

Nuestros programadores estrellas han agotado sus depósitos de café, investigando noche y día por la resolución, hasta que Marco halló el hallazgo en GitLab así que ahora la compartimos con nosotros.

Solución:

Hay varias formas de realizar HTTP GET y POST peticiones:


Método A: HttpClient (Preferido)

Disponible en: .NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+ .

Actualmente es el enfoque preferido y es asíncrono y de alto rendimiento. Utilice la versión integrada en la mayoría de los casos, pero para plataformas muy antiguas existe un paquete NuGet.

using System.Net.Http;

Configuración

Se recomienda instanciar uno HttpClient durante la vigencia de su aplicación y compártala a menos que tenga una razón específica para no hacerlo.

private static readonly HttpClient client = new HttpClient();

Ver HttpClientFactory para una solución de inyección de dependencia.


  • POST

    var values = new Dictionary
    
         "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");
    

Método B: bibliotecas de terceros

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(request);
     var name = response2.Data.Name;
    

Flurl.Http

Es una biblioteca más nueva con una API fluida, ayudantes de prueba, utiliza HttpClient bajo el capó y es portátil. Está disponible a través de 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();
    

Método C: HttpWebRequest (no recomendado para trabajos nuevos)

Disponible en: .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0+. En .NET Core, es principalmente por compatibilidad: envuelve HttpClienttiene menos rendimiento y no obtendrá nuevas funciones.

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();
    

Método D: WebClient (no recomendado para trabajos nuevos)

Este es un envoltorio alrededor HttpWebRequest. Comparar con HttpClient.

Disponible en: .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");
    
    

Solicitud GET simple

using System.Net;

...

using (var wb = new WebClient())

    var response = wb.DownloadString(url);

Solicitud POST sencilla

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 tiene una muestra.

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();
        
    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *