USANDO IRON SUITE

Curl DotNet: Llevando los superpoderes de Curl al tiempo de ejecución de .NET

Para todo desarrollador .NET, el escenario es demasiado familiar: estás leyendo la documentación de una nueva API y el proveedor te da un comando curl para probar un endpoint. Te quedas mirando la sintaxis de la herramienta de línea de comandos, suspiras y comienzas el tedioso proceso de traducirla a una nueva instancia de HttpClient en C#.

Hay que mapear manualmente las cabeceras, asegurarse de que el valor de la cadena para el cuerpo está codificado correctamente, manejar el agente de usuario y esperar no haber pasado por alto un valor por defecto silencioso. Este proceso manual de copia y traducción de bash es propenso a errores. Si falta un encabezado, la solicitud HTTP falla.

Introduzca CurlDotNet. Creada por Jacob Mellor, director de tecnología de Iron Software, esta biblioteca .NET cambia por completo el flujo de trabajo. Le permite pegar comandos curl directamente en su código y ejecutarlos con el mismo comportamiento que espera del terminal.

¿Qué es Curl DotNet?

CurlDotNet es una implementación .NET pura de la herramienta CLI curl. A diferencia de otros wrappers, esta biblioteca no tiene dependencias nativas (como libcurl.dll). Se ha creado íntegramente en código gestionado, lo que significa que se ejecuta sin problemas en Windows, Linux y macOS sin necesidad de configuraciones complejas.

Tanto si está trabajando en una aplicación web en .NET Core como en una aplicación de consola o en canalizaciones CI, CurlDotNet aporta la verdadera semántica de Curl al tiempo de ejecución de .NET.

Características clave

  • Cero Traducción: Pegue los comandos HTTPS de curl directamente en su código fuente de C#.

  • Multiplataforma: Compatibilidad total con Windows, Linux, MacOS, etc.

  • Seguridad tipográfica: Opción de utilizar un constructor fluido para escenarios de inyección de dependencias.

  • Observabilidad: Soporte incorporado para emitir eventos estructurados para el registro.

Cómo empezar: Instalar y ejecutar

Para empezar, necesita instalar el paquete curldotnet a través de su gestor de paquetes. Puedes encontrar la última versión en las notas de la versión o simplemente ejecutarla:

dotnet add paquete CurlDotNet

Una vez instalado, puede ejecutar una llamada curl inmediatamente.

La API de cadenas: Comandos Paste y Go Curl

Este método es perfecto para comprobaciones de estado, agentes de soporte o creación rápida de prototipos. Basta con pasar el comando curl como una cadena.

using CurlDotNet;

// Simply paste the command string
var response = await Curl.ExecuteAsync("curl https://api.github.com/users/octocat");

// Access the data
Console.WriteLine(response.Body);
using CurlDotNet;

// Simply paste the command string
var response = await Curl.ExecuteAsync("curl https://api.github.com/users/octocat");

// Access the data
Console.WriteLine(response.Body);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Uso de Fluent Builder con variables de entorno

Para aplicaciones de producción en las que sea necesario manejar datos sensibles a través de variables de entorno, o que requieran una arquitectura más limpia, el constructor fluido es ideal. Puede especificar un nombre de cadena para las cabeceras o establecer una ruta de archivo explícitamente.

var response = await Curl.GetAsync("https://api.example.com/data")
    .WithHeader("Authorization", "Bearer " + Environment.GetEnvironmentVariable("API_KEY"))
    .WithTimeout(TimeSpan.FromSeconds(30))
    .ExecuteAsync();
var response = await Curl.GetAsync("https://api.example.com/data")
    .WithHeader("Authorization", "Bearer " + Environment.GetEnvironmentVariable("API_KEY"))
    .WithTimeout(TimeSpan.FromSeconds(30))
    .ExecuteAsync();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La conexión Iron Software: Integraciones del mundo real

CurlDotNet está patrocinado por Iron Software, una empresa dedicada a crear herramientas que resuelven los problemas más difíciles para los desarrolladores. Jacob Mellor creó CurlDotNet con la misma filosofía que impulsa la suite Iron Software: la experiencia del desarrollador es lo primero.

La verdadera potencia de CurlDotNet se despliega cuando se combina con los productos de Iron Software. Puede utilizar Curl para la compleja capa de transporte (gestión de proxies, autenticación heredada o peculiaridades http específicas de Curl) y las bibliotecas Iron para el trabajo pesado de procesamiento de documentos.

Ejemplo 1: Descarga y edición seguras de PDF con IronPDF

IronPDF

IronPDF es el estándar del sector para la generación de archivos PDF perfectos en .NET. A diferencia de otras bibliotecas que luchan con los estándares web modernos, IronPDF reproduce HTML, CSS y JavaScript exactamente como lo haría un navegador Chrome. Está diseñado para ser una solución completa: puede generar nuevos documentos a partir de cadenas HTML o archivos, editar PDF existentes, fusionar documentos y aplicar funciones de seguridad como marcas de agua y cifrado sin necesidad de dependencias externas ni de Adobe Acrobat instalado en el servidor.

Imagine que necesita descargar una factura generada desde un sistema interno heredado que requiere banderas curl complejas (como ignorar errores SSL o permutaciones de encabezado específicas) y, a continuación, marcarla con IronPDF.

Traducir esa petición a HttpClient puede llevar horas de depuración. Con CurlDotNet, se pega el comando, se obtienen los bytes y se entregan a IronPDF.

using CurlDotNet;
using IronPdf;

// 1. Use CurlDotNet to handle the complex transport
// We use -k to allow insecure SSL (common in legacy internal apps)
var curlCommand = "curl -k https://internal-billing.local/invoice/1234 -H 'X-Dept: Sales'";
var response = await Curl.ExecuteAsync(curlCommand);

if (response.IsSuccess)
{
    // 2. Pass the raw bytes directly to IronPDF
    // IronPDF renders the PDF from the downloaded data
    var pdfDocument = PdfDocument.FromPdf(response.BodyBytes);

    // 3. Apply a watermark and save
    pdfDocument.ApplyWatermark("CONFIDENTIAL", 30, VerticalAlignment.Middle, HorizontalAlignment.Center);
    pdfDocument.SaveAs("Processed_Invoice.pdf");

    Console.WriteLine("Invoice downloaded and secured via IronPDF.");
}
using CurlDotNet;
using IronPdf;

// 1. Use CurlDotNet to handle the complex transport
// We use -k to allow insecure SSL (common in legacy internal apps)
var curlCommand = "curl -k https://internal-billing.local/invoice/1234 -H 'X-Dept: Sales'";
var response = await Curl.ExecuteAsync(curlCommand);

if (response.IsSuccess)
{
    // 2. Pass the raw bytes directly to IronPDF
    // IronPDF renders the PDF from the downloaded data
    var pdfDocument = PdfDocument.FromPdf(response.BodyBytes);

    // 3. Apply a watermark and save
    pdfDocument.ApplyWatermark("CONFIDENTIAL", 30, VerticalAlignment.Middle, HorizontalAlignment.Center);
    pdfDocument.SaveAs("Processed_Invoice.pdf");

    Console.WriteLine("Invoice downloaded and secured via IronPDF.");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Confirmación de la consola

Confirmación escrita en la consola confirmando que el PDF está guardado

Resultado PDF

Archivo PDF de ejemplo

Ejemplo 2: Scraping y OCR con IronOCR

IronOCR

IronOCR es una biblioteca avanzada de reconocimiento óptico de caracteres basada en el motor Tesseract 5, ajustada específicamente para C# y .NET. Es compatible con más de 127 idiomas y destaca en la lectura de texto de fuentes imperfectas, como escaneos de baja resolución, imágenes giradas o fondos ruidosos. Sus funciones de "visión por ordenador" le permiten detectar regiones de texto automáticamente, y puede generar datos no solo como cadenas simples, sino como contenido estructurado (códigos de barras, párrafos, líneas y caracteres) para un análisis en profundidad.

A veces es necesario extraer datos de una imagen alojada en un servidor que bloquea los scrapers .NET estándar. Puede utilizar CurlDotNet para imitar un agente de usuario de navegador estándar sin esfuerzo y, a continuación, utilizar IronOCR para leer el texto.

using CurlDotNet;
using IronOcr;

// 1. Fetch the image using a specific browser User-Agent to bypass blocks
var imgResponse = await Curl.GetAsync("https://site.com/protected-captcha.png")
    .WithUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
    .ExecuteAsync();

// 2. Use IronOCR to read text from the file bytes
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    input.AddImage(imgResponse.BodyBytes);
    var result = ocr.Read(input);

    // 3. Output the extracted string value
    Console.WriteLine($"OCR Result: {result.Text}");
}
using CurlDotNet;
using IronOcr;

// 1. Fetch the image using a specific browser User-Agent to bypass blocks
var imgResponse = await Curl.GetAsync("https://site.com/protected-captcha.png")
    .WithUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
    .ExecuteAsync();

// 2. Use IronOCR to read text from the file bytes
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    input.AddImage(imgResponse.BodyBytes);
    var result = ocr.Read(input);

    // 3. Output the extracted string value
    Console.WriteLine($"OCR Result: {result.Text}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ejemplo de salida deOCR

Ejemplo de uso de IronOCR con CurlDotNet

Ejemplo 3: Gestión de inventario con IronBarcode

IronBarcode

IronBarcode es una biblioteca versátil diseñada para leer y escribir prácticamente cualquier formato de código de barras, desde UPC y EAN estándar hasta complejos códigos QR y etiquetas Data Matrix. Se ha creado para la tolerancia a fallos; la biblioteca incluye filtros automáticos de corrección de imagen que pueden afinar, binarizar potencialmente y rotar imágenes para detectar códigos de barras incluso si están dañados, torcidos o mal iluminados. Esto lo convierte en una herramienta esencial para aplicaciones de logística, comercio minorista e industria en las que no se dispone de escáneres de hardware.

En este caso, utilizamos el preciso control de red de CurlDotNet para obtener una etiqueta de una API segura y el sólido motor de lectura de IronBarcode para verificar el contenido al instante.

using CurlDotNet;
using IronBarCode;

class Program
{
    private static readonly HttpClient client = new HttpClient();
    public static async Task Main(string[] args)
    {

        // 1. Define the URL 
        string url = "https://barcodeapi.org/api/128/Shipping-Label-Test-123";

        try
        {
            // Add the session cookie to the request headers
            client.DefaultRequestHeaders.Add("Cookie", "session_id=xyz123");

            // 2. Download the image data as a Byte Array (Preserves binary integrity)
            byte[] imageBytes = await client.GetByteArrayAsync(url);

            Console.WriteLine($"Downloaded {imageBytes.Length} bytes.");

            // 3. Read the barcode directly from the byte array
            var result = BarcodeReader.Read(imageBytes);

            foreach (var barcode in result)
            {
                Console.WriteLine($"Detected Format: {barcode.BarcodeType}");
                Console.WriteLine($"Value: {barcode.Value}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
using CurlDotNet;
using IronBarCode;

class Program
{
    private static readonly HttpClient client = new HttpClient();
    public static async Task Main(string[] args)
    {

        // 1. Define the URL 
        string url = "https://barcodeapi.org/api/128/Shipping-Label-Test-123";

        try
        {
            // Add the session cookie to the request headers
            client.DefaultRequestHeaders.Add("Cookie", "session_id=xyz123");

            // 2. Download the image data as a Byte Array (Preserves binary integrity)
            byte[] imageBytes = await client.GetByteArrayAsync(url);

            Console.WriteLine($"Downloaded {imageBytes.Length} bytes.");

            // 3. Read the barcode directly from the byte array
            var result = BarcodeReader.Read(imageBytes);

            foreach (var barcode in result)
            {
                Console.WriteLine($"Detected Format: {barcode.BarcodeType}");
                Console.WriteLine($"Value: {barcode.Value}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Salida de consola de IronBarcode

Ejemplo de uso de IronBarcode con CurlDotNet

Llevando "Userland" a .NET

El concepto de "Userland" que CurlDotNet lleva a .NET va más allá de realizar solicitudes. Permite utilizar la funcionalidad estándar de curl en lugares como CI pipelines o contenedores docker ejecutando Linux macOS o windows.

Puede utilizarlo para descargar archivos, cargar datos o activar webhooks utilizando la sintaxis bash estándar dentro de un contexto de ejecución DotNet. De este modo se tiende un puente entre el mundo de las herramientas de línea de comandos y su aplicación compilada.

Conclusión: El fin del impuesto a la traducción

No se trata sólo de hacer peticiones HTTP; se trata de respetar el tiempo del desarrollador. Jacob Mellor y Iron Software entienden que si una herramienta como curl ha funcionado perfectamente durante 25 años, el tiempo de ejecución de .NET debe adoptarla, no obligarte a reimplementarla.

Al adoptar CurlDotNet, no solo está añadiendo una dependencia; estás adoptando un flujo de trabajo que da prioridad al envío de funciones frente a la redacción de textos repetitivos. Deje de "traducir" y empiece a ejecutar. Tanto si se trata de capturar un único archivo JSON como de orquestar complejos flujos de trabajo de documentos de Iron Software, la instrucción sigue siendo la misma: pegar, ejecutar, listo.

Próximos pasos

Deje de perder tiempo traduciendo cabeceras y depurando HttpClient. Únete al movimiento Userland.NET.

  1. Comprueba el GitHub: Visita jacob-mellor/curl-dot-net para ver el código fuente, la documentación y el directorio de ejemplos.

  2. Descargue el paquete NuGet: Ejecute el paquete add de DotNet CurlDotNet para instalar la biblioteca.

  3. Explore Iron Software: Vea cómo IronPDF y IronOCR pueden trabajar en tándem con CurlDotNet para acelerar su proyecto.

Con CurlDotNet, se asegurará de que sus comandos Curl y su código C# hablen exactamente el mismo idioma.