Curl DotNet : Les superpuissances de Curl au service de l'exécution .NET
Pour tout développeur .NET, le scénario n'est que trop familier : vous lisez la documentation d'une nouvelle API et le fournisseur vous donne une commande curl pour tester un point d'extrémité. Vous fixez la syntaxe de l'outil de ligne de commande, soupirez et entamez le processus fastidieux de traduction en une nouvelle instance HttpClient en C#.
Vous devez mapper manuellement les en-têtes, vous assurer que la valeur de la chaîne pour le corps est encodée correctement, gérer l'agent utilisateur et espérer que vous n'avez pas manqué un défaut silencieux. Ce processus manuel de copie et de traduction de bash est sujet aux erreurs. Un en-tête manquant et votre requête HTTP échoue.
Entrez CurlDotNet. Créée par Jacob Mellor, le directeur technique d'Iron Software, cette bibliothèque .NET modifie entièrement le flux de travail. Il vous permet de coller des commandes curl directement dans votre code et de les exécuter avec le même comportement que celui que vous attendez du terminal.
Qu'est-ce que Curl DotNet?
CurlDotNet est une implémentation purement .NET de l'outil CLI curl. Contrairement à d'autres wrappers, cette bibliothèque n'a pas de dépendances natives (comme libcurl.dll). Il est entièrement construit en code géré, ce qui signifie qu'il fonctionne de manière transparente sur Windows, Linux et macOS sans configuration complexe.
Que vous travailliez sur une web app en .NET Core, une application console ou des pipelines CI, CurlDotNet apporte la véritable sémantique curl au runtime .NET.
Fonctionnalités clés
-
Traduction zéro: Collez les commandes HTTPS curl directement dans votre source C#.
-
Cross-Platform: Prise en charge complète de Windows, Linux, MacOS, etc.
-
Type Safety: Option d'utilisation d'un constructeur fluide pour les scénarios d'injection de dépendances.
- Observabilité: Prise en charge intégrée de l'émission d'événements structurés pour la journalisation.
Pour commencer : Installer et exécuter
Pour commencer, vous devez installer le paquet curldotnet via votre gestionnaire de paquets. Vous pouvez trouver la dernière version dans les notes de mise à jour ou simplement exécuter :
dotnet add package CurlDotNet
Une fois installé, vous pouvez exécuter un appel curl immédiatement.
L'API des chaînes de caractères : Les commandes Curl Paste et Go
Cette méthode est parfaite pour les bilans de santé, les agents d'assistance ou le prototypage rapide. Il suffit de transmettre la commande curl sous la forme d'une chaîne de caractères.
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
Utilisation de Fluent Builder avec des variables d'environnement
Pour les applications de production où vous devez manipuler des données sensibles via des variables d'environnement, ou qui nécessitent une architecture plus propre, le fluent builder est idéal. Vous pouvez spécifier un nom de chaîne pour les en-têtes ou définir explicitement un chemin d'accès au fichier.
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
La connexion Iron Software : Intégrations dans le monde réel
CurlDotNet est sponsorisé par Iron Software, une société dédiée à la construction d'outils qui résolvent les problèmes les plus difficiles pour les développeurs. Jacob Mellor a créé CurlDotNet avec la même philosophie que celle qui anime la suite Iron Software : l'expérience du développeur passe avant tout.
La véritable puissance de CurlDotNet est dévoilée lorsqu'elle est associée aux produits d'Iron Software. Vous pouvez utiliser Curl pour la couche de transport complexe (gérer les proxies, l'authentification héritée ou les bizarreries curl http spécifiques) et les bibliothèques Iron pour les tâches lourdes de traitement des documents.
Exemple 1 : Téléchargement et édition sécurisés de fichiers PDF avec IronPDF

IronPDF est la norme industrielle pour générer des PDF parfaits au pixel près dans .NET. Contrairement à d'autres bibliothèques qui se débattent avec les normes web modernes, IronPDF rend HTML, CSS, et JavaScript exactement comme le ferait un navigateur Chrome. Il est conçu pour être une solution complète : vous pouvez générer de nouveaux documents à partir de chaînes HTML ou fichiers, éditer des PDF existants, fusionner des documents et appliquer des fonctions de sécurité telles que le filigrane et le cryptage sans avoir besoin de dépendances externes ou qu'Adobe Acrobat soit installé sur le serveur.
Imaginez que vous deviez télécharger une facture générée à partir d'un ancien système interne qui nécessite des drapeaux curl complexes (comme ignorer les erreurs SSL ou des permutations d'en-tête spécifiques), puis watermark l'utiliser à l'aide d'IronPDF.
La traduction de cette requête en HttpClient pourrait nécessiter des heures de débogage. Avec CurlDotNet, vous collez la commande, obtenez les octets et les remettez à 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
Confirmation de console
Confirmation écrite dans la console confirmant que le PDF est enregistré
PDF en sortie
Exemple 2 : Scraping et OCR avec IronOCR

IronOCR est une bibliothèque de reconnaissance optique de caractères avancée alimentée par le moteur Tesseract 5, peaufinée spécifiquement pour C# et .NET. Le logiciel prend en charge plus de 127 langues et excelle dans la lecture de textes provenant de sources imparfaites : scans à faible résolution, images pivotées ou arrière-plans bruyants. Ses capacités de "Computer Vision" lui permettent de détecter automatiquement les régions de texte, et il peut restituer les données non seulement sous forme de chaînes de caractères simples, mais aussi sous forme de contenu structuré (codes-barres, paragraphes, lignes et caractères) en vue d'une analyse approfondie.
Vous devez parfois extraire des données d'une image hébergée sur un serveur qui bloque les scrapers .NET standard. Vous pouvez utiliser CurlDotNet pour imiter sans effort un agent utilisateur de navigateur standard, puis utiliser IronOcr pour lire le texte.
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
Exemple de sortie de l'OCR
Exemple de sortie pour l'utilisation d'IronOCR avec CurlDotNet
Exemple 3 : Gestion des stocks avec IronBarcode

IronBarcode est une bibliothèque polyvalente conçue pour lire et écrire pratiquement n'importe quel format de code-barres, des CUP et EAN standard aux codes QR complexes et aux balises Data Matrix. Il est conçu pour la tolérance aux pannes ; la bibliothèque comprend des filtres automatiques correction d'image qui peuvent accentuer la netteté, la binarisation potentielle et la rotation des images pour détecter les codes-barres même s'ils sont endommagés, de travers ou mal éclairés. La traduction doit rester professionnelle et préserver la précision technique tout en expliquant les caractéristiques et les avantages de ces outils de développement, ce qui en fait un outil essentiel pour la logistique, le commerce de détail et les applications industrielles où les scanners matériels ne sont pas disponibles.
Dans ce scénario, nous utilisons le contrôle réseau précis de CurlDotNet pour récupérer une étiquette à partir d'une API sécurisée, et le robuste moteur de lecture d'IronBarcode pour vérifier le contenu instantanément.
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
Sortie de la console IronBarcode
Exemple de sortie pour l'utilisation d'IronBarcode avec CurlDotNet
Apporter le "Userland" à .NET
CurlDotNet apporte le concept de "Userland" à .NET, ce qui va au-delà de la simple formulation de requêtes. Il vous permet d'utiliser la fonctionnalité curl standard dans des endroits tels que les pipelines CI ou les conteneurs Docker fonctionnant sous Linux, macOS ou Windows.
Vous pouvez l'utiliser pour télécharger des fichiers, des données ou déclencher des webhooks à l'aide de la syntaxe bash standard dans un contexte d'exécution DotNet. Cela permet de combler le fossé entre le monde des outils de ligne de commande et votre application compilée.
Conclusion : La fin de la taxe sur la traduction
Il ne s'agit pas seulement de faire des requêtes HTTP ; il s'agit de respecter le temps du développeur. Jacob Mellor et Iron Software ont compris que si un outil comme curl fonctionne parfaitement depuis 25 ans, le moteur d'exécution .NET doit l'adopter, et non vous obliger à le réimplémenter.
En adoptant CurlDotNet, vous ne faites pas qu'ajouter une dépendance ; vous adoptez un flux de travail qui donne la priorité à la livraison de fonctionnalités plutôt qu'à la rédaction de textes passe-partout. Vous arrêtez de "traduire" et commencez à exécuter. Qu'il s'agisse de saisir un simple fichier JSON ou d'orchestrer des flux de documents complexes de logiciels Iron, la consigne reste la même : coller, exécuter, terminé.
Prochaines étapes
Ne perdez plus de temps à traduire les en-têtes et à déboguer HttpClient. Rejoignez le mouvement Userland.NET.
-
Vérifiez le GitHub: Visitez jacob-mellor/curl-dot-net pour voir le code source, la documentation et le répertoire d'exemples.
-
Télécharger le package NuGet : Exécuter DotNet ajouter le package CurlDotNet pour installer la bibliothèque.
- Explorer Iron Software: Découvrez comment IronPDF et IronOCR peuvent fonctionner en tandem avec CurlDotNet pour accélérer votre projet.
En tirant parti de CurlDotNet, vous vous assurez que vos commandes curl et votre code C# parlent exactement le même langage.