使用IRON SUITE

Curl DotNet:為 .NET Runtime 帶來 Curl 超強功能

對於每一位 .NET 開發人員來說,這樣的情境再熟悉不過:您正在閱讀一個新 API 的說明文件,而提供者給了您一個 curl 指令來測試一個端點。 您盯著命令列工具的語法,嘆了一聲氣,然後開始將其翻譯成 C# 語言的新 HttpClient 範例的繁瑣過程。

您必須手動映射標頭、確保正文的字串值編碼正確、處理使用者代理程式,並希望您沒有遺漏默認預設值。 這種手動的 bash 複製和翻譯過程很容易出錯。 少了一個標頭,您的 HTTP 請求就會失敗。

輸入 CurlDotNet。 由 Iron Software 的 CTO Jacob Mellor 所創造,這個 .NET 函式庫完全改變了工作流程。 它允許您直接將 curl 指令貼到程式碼中,並以與終端機相同的行為執行。

什麼是 Curl DotNet?

CurlDotNet 是 curl CLI 工具的純 .NET 實作。 與其他包裝程式不同,此程式庫沒有本機相依性 (如 libcurl.dll)。 本軟體完全以管理程式碼建立,這表示本軟體可在 Windows、Linux 及 macOS 上無縫執行,無須複雜的設定。

無論您是在 .NET Core 中開發 web 應用程式、主控台應用程式或 CI 管道,CurlDotNet 都能為 .NET 運行時帶來真正的 curl 語義。

主要功能

  • 零翻譯:直接將 curl HTTPS 指令貼到 C# 原始碼中。

  • 跨平台:完全支援 Windows、Linux、MacOS 等作業系統。

  • 類型安全:可選擇使用流暢的建構器來處理依賴注入情境。

  • 可觀察性:內建支援發出結構化事件以記錄日誌。

入門:安裝與執行

首先,您需要透過套件管理員安裝套件 curldotnet。 您可以在發佈筆記中找到最新版本,或直接執行:

dotnet 新增套件 CurlDotNet

安裝完成後,即可立即執行 curl 呼叫。

字串 API:粘貼和 Go Curl 指令

此方法非常適合健康檢查、支援代理或快速原型設計。 您只需將 curl 指令以字串形式傳送即可。

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

利用環境變數使用 Fluent 建立程式。

對於需要透過環境變數處理敏感資料,或需要更簡潔架構的生產應用程式,fluent builder 是理想的選擇。 您可以為標頭指定字串名稱或明確設定檔案路徑。

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

Iron Software Connection:真實世界的整合

CurlDotNet由 Iron Software 贊助,該公司致力於建立工具,為開發人員解決最棘手的問題。 Jacob Mellor 創建 CurlDotNet 的理念與 Iron Software Suite 的理念相同:開發者的經驗是第一位的。

當與 Iron Software 產品結合時,CurlDotNet 的真正威力將會釋放出來。 您可以使用 Curl 來處理複雜的傳輸層(處理代理、傳統 auth 或特定的 curl http 怪癖),並使用 Iron 函式庫來處理文件的繁重工作。

範例 1:使用 IronPDF 安全下載和編輯 PDF

IronPDF

IronPDF 是在 .NET 中生成像素完美的 PDF 的行業標準。 IronPDF 完全按照 Chrome 瀏覽器的方式呈現 HTMLCSSJavaScript,與其他在現代網路標準上掙扎的函式庫不同。 IronPDF 是一套完整的解決方案:您可以從 HTML 字串檔案產生新文件、編輯現有的 PDF、合併文件,以及套用 水印和加密等安全功能,而不需要外部相依性或在伺服器上安裝 Adobe Acrobat。

試想一下,您需要從傳統的內部系統下載生成的發票,該系統需要複雜的 curl 標誌(例如忽略 SSL 錯誤或特定的標頭排列),然後用 IronPDF 水印它。

將該請求翻譯為 HttpClient 可能需要數小時的調試時間。 使用 CurlDotNet,您可以貼上指令、取得位元組,然後將它們交給 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

控制台確認

Confirmation written to console confirmationing the PDF is saved

PDF輸出

 輸出 PDF 檔案範例

範例 2:使用 IronOCR 進行掃描和 OCR

IronOCR

IronOCR 是由 Tesseract 5 引擎提供動力的先進光學字元識別庫,專為 C# 和 .NET 微調。 它支援超過127種語言,並擅長從不完美的來源讀取文字,例如低解析度掃描、旋轉的影像或嘈雜的背景。 它的 "電腦視覺 "功能可讓它自動偵測文字區域,不僅能以純字串形式輸出資料,還能以結構化內容(Barcode、段落、行和字元)形式輸出資料,以便進行深入分析。

有時候您需要 從封鎖標準 .NET scraers 的伺服器上託管的影像中抽取資料。 您可以使用 CurlDotNet 毫不費力地模仿標準的瀏覽器使用者代理,然後再使用 IronOCR 來閱讀文字。

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

OCR 範例輸出

使用 IronOCR 與 CurlDotNet 的範例輸出

範例 3:使用 IronBarcode 管理庫存

IronBarcode

IronBarcode是一個多功能的函式庫,設計用於讀取寫入幾乎任何條碼格式,從標準的 UPC 和 EAN 到複雜的 QR 碼和 Data Matrix 標籤。 它是為了容錯而建立的; 該函式庫包含自動 影像矯正濾鏡,可以銳化、潛在二值化和旋轉影像,即使影像損壞、歪斜或光線不足,也能偵測到 BarCode。 這使得它成為物流、零售和工業應用中沒有硬體掃描器的必備工具。

在這個情境中,我們使用 CurlDotNet 精確的網路控制,從安全的 API 取得標籤,並使用 IronBarcode 強大的 讀取引擎,即時確認內容。

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

IronBarcode 控制台輸出

使用 IronBarcode 與 CurlDotNet 的輸出範例

將"使用者領域"帶入 .NET

CurlDotNet 將"Userland"的概念帶入 .NET 不只是提出請求。 它可以讓您在執行 Linux macOS 或 windows 的 CI 管道或 docker 容器等地方使用標準的 curl 功能。

您可以使用它在 DotNet run 上下文中使用標準 bash 語法下載檔案、上傳資料或觸發 webhook。 這將縮短命令列工具世界與您的編譯應用程式之間的距離。

結論:翻譯稅的終結

這不僅僅是提出 HTTP 請求; 尊重開發人員的時間。Jacob Mellor 和 Iron Software 明白,如果像 curl 這樣的工具已經完美運作了 25 年,.NET runtime 應該擁抱它,而不是強迫您重新實作它。

採用 CurlDotNet,您不只是增加了一個依賴; 您採用的工作流程是優先出貨功能,而非撰寫模板。 您停止"翻譯"並開始執行。 無論您是抓取單一的 JSON 檔案,或是協調複雜的 Iron Software 文件工作流程,指令都是一樣的:貼上、執行、完成。

後續步驟

不要再浪費時間翻譯標頭和調試 HttpClient。 加入 Userland.NET 運動。

1.檢查 GitHub:請造訪 jacob-mellor/curl-dot-net 查看原始碼、文件和範例目錄。

2.下載 NuGet 套件:執行 DotNet 新增套件 CurlDotNet 以安裝函式庫。

3.探索 Iron Software:看看 IronPDFIronOCR 如何與 CurlDotNet 配合使用,加速您的專案。

利用 CurlDotNet,您可以確保您的 curl 指令和 C# 程式碼使用完全相同的語言。