Hacer una llamada CURL en C#

Syed Hassan Sabeeh Kazmi 12 octubre 2023
  1. Use HttpWebRequest o HttpWebResponse para hacer una llamada CURL en C#
  2. Use WebClient para hacer una llamada CURL en C#
  3. Use HttpClient para hacer una llamada CURL en C#
  4. Conclusión
Hacer una llamada CURL en C#

La URL del cliente (cURL) es el estándar de facto para los documentos de la API en C#. Requiere conversión de un formato a otro.

Por lo tanto, transformar JSON en una clase C# es un enfoque razonablemente popular. El objeto de respuesta de la web o del host también se convierte en una clase de C# para que sea más fácil de usar para los desarrolladores.

Este artículo analizará tres enfoques para realizar una llamada cURL en C#.

Cree una comunicación con el servidor especificando la ubicación y los datos que desea enviar usando cURL en C#. Como la URL sigue a cada comando de cURL, siempre recupera algunos datos y devuelve la fuente HTML para una cURL.

cURL es altamente portátil y compatible con casi todos los sistemas operativos y dispositivos conectados. En C#, cURL es útil para probar puntos finales y proporciona detalles de lo que se envió o recibió exactamente, lo que es bueno para el registro de errores y la depuración.

Dado que cURL usa libcurl, es compatible con la misma variedad de protocolos de Internet comunes que admite libcurl.

Use HttpWebRequest o HttpWebResponse para hacer una llamada CURL en C#

La clase HttpWebRequest soporta los métodos y propiedades definidos en WebRequest. Sus propiedades y métodos adicionales permiten a los usuarios interactuar directamente con los servidores mediante HTTP.

Utilice el método WebRequest.Create para inicializar nuevos objetos HttpWebRequest. Utilice el método GetResponse para realizar una solicitud síncrona al recurso especificado en la propiedad RequestUri.

Devuelve un HttpWebResponse que contiene el objeto de respuesta. En el caso de un objeto de respuesta cerrado, se fortalecerán los datos restantes.

Es una solicitud de mantenimiento de vida o canalizada; solo se necesita recibir una pequeña cantidad de datos en intervalos cortos. En C#, el marco .NET incluye una nueva función de seguridad que bloquea los algoritmos de cifrado y hash inseguros para las conexiones y los objetivos que obtienen un comportamiento más seguro de forma predeterminada.

// create a separate class

// Include the `System.Net` and `System.IO` into your C# project and install NuGet `Newtonsoft.Json`
// package before executing the C# code.
using System.Net;
using System.IO;
using Newtonsoft.Json;

namespace cURLCall {
  public class gta_allCustomersResponse {
    public static void gta_AllCustomers() {
      var httpWebRequest = (HttpWebRequest)WebRequest.Create(
          "https://api.somewhere.com/desk/external_api/v1/customers.json");
      httpWebRequest.ContentType = "application/json";
      httpWebRequest.Accept = "*/*";
      httpWebRequest.Method = "GET";
      httpWebRequest.Headers.Add("Authorization", "Basic reallylongstring");

      var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
        gta_allCustomersResponse answer =
            JsonConvert.DeserializeObject<gta_allCustomersResponse>(streamReader.ReadToEnd());
        // return answer;
      }
    }
  }
}

Llame al método gta_AllCustomers() de la clase gta_allCustomersResponse en el formulario principal para realizar una llamada cURL.

using static cURLCall.gta_allCustomersResponse;

gta_AllCustomers();

El HttpWebResponse admite usuarios específicos de HTTP de las propiedades y métodos de la clase WebResponse para realizar una llamada cURL en C#. Cree una instancia de la clase HttpWebResponse y cierre la respuesta llamando a los métodos Stream.Close o HttpWebResponse.Close y libere la conexión para reutilizarla una vez que la respuesta se reciba correctamente.

Use WebClient para hacer una llamada CURL en C#

La clase WebClient proporciona métodos de transformación o recepción de datos sobre el recurso local o de Internet identificado por un URI. Utiliza la clase WebRequest para proporcionar acceso a los recursos.

El WebClient es una abstracción de alto nivel construida sobre HttpWebRequest para simplificar las tareas más comunes para realizar una llamada cURL en C#.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using Newtonsoft.Json;

namespace cURLCall {
  public static class StaticItems {
    public static string EndPoint = "http://localhost:8088/api/";
  }

  public class CityInfo {
    public int CityID { get; set; }
    public int CountryID { get; set; }
    public int StateID { get; set; }
    public string Name { get; set; }
    public decimal Latitude { get; set; }
    public decimal Longitude { get; set; }
  }

  public class receiveData {
    public List<CityInfo> CityGet() {
      try {
        using (WebClient webClient = new WebClient()) {
          webClient.BaseAddress = StaticItems.EndPoint;
          var json = webClient.DownloadString("City/CityGetForDDL");
          var list = JsonConvert.DeserializeObject<List<CityInfo>>(json);
          return list.ToList();
        }
      } catch (WebException ex) {
        throw ex;
      }
    }
  }
  public class ReturnMessageInfo {
    public ReturnMessageInfo CitySave(CityInfo city) {
      ReturnMessageInfo result = new ReturnMessageInfo();
      try {
        using (WebClient webClient = new WebClient()) {
          webClient.BaseAddress = StaticItems.EndPoint;
          var url = "City/CityAddUpdate";
          webClient.Headers.Add(
              "user-agent",
              "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
          webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
          string data = JsonConvert.SerializeObject(city);
          var response = webClient.UploadString(url, data);
          result = JsonConvert.DeserializeObject<ReturnMessageInfo>(response);
          return result;
        }
      } catch (Exception ex) {
        throw ex;
      }
    }
  }
}

Clases como FileWebRequest y FtpWebRequest heredan de WebRequest. En general, puede utilizar WebRequest para realizar una solicitud y convertir la devolución en HttpWebRequest, FileWebRequest o FtpWebRequest, según su solicitud.

Es uno de los métodos ideales para realizar una llamada cURL al proporcionar operaciones comunes para enviar y recibir datos de un recurso identificado por un URI.

Use HttpClient para hacer una llamada CURL en C#

La clase HttpClient está diseñada para ser mucho mejor que cualquier otra clase que ofrezca métodos para enviar solicitudes HTTP y recibir respuestas HTTP de un recurso identificado por un URI. Su instancia es una colección de configuraciones aplicadas a todas las solicitudes que actúan como una sesión para enviar solicitudes HTTP.

Además, cada instancia de HttpClient usa su conjunto de conexiones para cada llamada cURL.

En C#, HttpClient está destinado a ser instanciado una vez y reutilizado a lo largo de la vida de una aplicación. Como una API de nivel superior, HttpClient envuelve la funcionalidad de nivel inferior en cada plataforma disponible (incluidas las plataformas donde se ejecuta).

Además, el comportamiento de esta clase se puede personalizar para obtener un beneficio de rendimiento significativo, especialmente para las solicitudes HTTP. Las opciones de configuración de tiempo de ejecución en .NET pueden configurar HttpClient para personalizar su comportamiento.

using System;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using Newtonsoft.Json;

class UserInfo {
  public string UserName { get; set; }
  public string Email { get; set; }

  public override string ToString() {
    return $"{UserName}: {Email}";
  }
}

class cURLCall {
  static async Task Main(string[] args) {
    var user = new UserInfo();
    user.UserName = "My Name";
    user.Email = "myname4321@exp.com";

    var json = JsonConvert.SerializeObject(person);
    var data = new StringContent(json, Encoding.UTF8, "application/json");

    var url = "https://httpbin.org/post";
    var client = new HttpClient();

    var response = await client.PostAsync(url, data);

    string result = response.Content.ReadAsStringAsync().Result;

    // processed user info thorugh HttpClient
    Console.WriteLine(result);
  }
}

La clase HttpClient tiene un mejor soporte para manejar diferentes tipos de respuesta y también ofrece un mejor soporte para operaciones asincrónicas sobre las opciones mencionadas anteriormente.

Conclusión

Este artículo le ha enseñado tres métodos útiles para realizar una llamada cURL en C#. Ahora puede usar el código C# para realizar llamadas cURL para probar sus terminales y solucionar problemas de sus aplicaciones C#.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub