Curl DotNet:.NETランタイムにCurlのスーパーパワーをもたらす
新しいAPIのドキュメントを読んでいて、プロバイダからエンドポイントをテストするためのcurlコマンドを渡される。 あなたはコマンドラインツールの構文を見つめ、ため息をつき、それをC#の新しいHttpClientインスタンスに翻訳する退屈なプロセスを開始します。
ヘッダーを手作業でマッピングし、本文の文字列値が正しくエンコードされていることを確認し、ユーザーエージェントを処理し、サイレントデフォルトを見逃していないことを祈る必要があります。 この手作業によるbashのコピーと翻訳プロセスは、エラーが発生しやすいものです。 ヘッダーが1つでも欠けると、HTTPリクエストは失敗します。
CurlDotNet を入力してください。 IronソフトウェアのCTOであるJacob Mellorによって作成されたこの.NETライブラリは、ワークフローを完全に変えます。 curlコマンドをコードに直接貼り付け、ターミナルから期待するのと同じ動作で実行することができます。
CurlDotNetとは何ですか?
CurlDotNet は、curl CLIツールの純粋な.NET実装です。 他のラッパーとは異なり、このライブラリにはネイティブの依存関係がありません(libcurl.dll のような)。 完全にマネージドコードで構築されているため、複雑な設定なしにWindows、Linux、macOS上でシームレスに動作します。
NET CoreのWebアプリ、コンソールアプリケーション、またはCIパイプラインのいずれで作業していても、CurlDotNetは.NETランタイムに真のcurlセマンティクスをもたらします。
主要機能
ゼロ翻訳: C#ソースにcurl HTTPSコマンドを直接貼り付けます。
クロスプラットフォーム: Windows、Linux、MacOSなどをフルサポート。
型安全性: 依存性注入シナリオのために流暢なビルダーを使用するオプション。
- 観測可能性: ロギング用に構造化されたイベントを発行するための組み込みサポート。
はじめに:インストールと実行
始めるには、パッケージマネージャ経由でcurldotnetパッケージをインストールする必要があります。 最新バージョンはリリースノートでご覧になれます:
dotnet add パッケージ CurlDotNetインストールしたら、すぐにcurlコールを実行できます。
文字列 API: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環境変数を使って機密データを扱う必要がある場合や、よりクリーンなアーキテクチャを必要とする本番アプリケーションには、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ソフトウェア・コネクション:実世界での統合
CurlDotNetは、開発者にとって最も困難な問題を解決するツールの構築に専念しているIron Softwareによって後援されています。 Jacob Mellorは、CurlDotNetを、Iron Softwareスイートの原動力である"開発者の体験を第一に"という同じ哲学に基づいて作成しました。
CurlDotNetの真のパワーは、Iron Software製品と組み合わせることで発揮されます。 複雑なトランスポートレイヤー(プロキシ、レガシー認証、または特定のcurl httpの癖を処理する)にはCurlを使用し、ドキュメント処理の重労働にはIronライブラリを使用することができます。
例1: IronPDFによる安全なPDFのダウンロードと編集

IronPDFは、.NETでピクセルパーフェクトなPDFを生成するための業界標準です。 最新のウェブ標準と格闘している他のライブラリとは異なり、IronPDFはHTML、CSS、JavaScriptをChromeブラウザとまったく同じようにレンダリングします。 HTML文字列やファイルから新しいドキュメントを生成したり、既存のPDFを編集したり、ドキュメントをマージしたり、透かしや暗号化のようなセキュリティ機能を適用したりすることができます。
複雑な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コンソールの確認
PDF出力
例2: IronOCRによるスクレイピングとOCR

IronOCRは、Tesseract 5エンジンを搭載し、C#と.NETのために特別に調整された高度な光学式文字認識ライブラリです。 127 以上の言語をサポートし、不完全なソース(低解像度のスキャン、回転した画像、ノイズの多い背景など)からテキストを読み取ることに優れています。 コンピュータ・ビジョン"機能により、テキスト領域を自動的に検出し、データを単なる文字列としてだけでなく、構造化されたコンテンツ(BarCode、段落、行、文字)として出力し、深く分析することができます。
標準的な.NETスクレイパーをブロックしているサーバーでホストされている画像からデータを抽出する必要があることがあります。 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.comOCR出力例
例3: IronBarcodeで在庫を管理する
IronBarcodeは、読み取り、書き込み、標準のUPCやEANから複雑なQRコードやData Matrixタグまで、事実上あらゆるバーコード形式を読み取るために設計された汎用ライブラリです。 これは、フォールトトレランスのために構築されています; このライブラリには、自動 画像補正 フィルタが含まれており、画像を鮮明化、潜在的な二値化、回転させることで、破損していたり、傾いていたり、照明が十分でない場合でもバーコードを検出できます。 そのため、ハードウェア・スキャナーが使用できない物流、小売、産業用途には不可欠なツールとなります。
このシナリオでは、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.comIronBarcode コンソール出力
.NETに"ユーザーランド"をもたらす
CurlDotNetは、.NETに "ユーザーランド "のコンセプトをもたらすことで、単にリクエストするだけではありません。 これにより、Linux macOSやwindowsを実行するCIパイプラインやdockerコンテナのような場所で、標準的なcurlの機能を使用することができます。
DotNetの実行コンテキスト内で標準的なbash構文を使用して、ファイルのダウンロード、データのアップロード、またはWebhookのトリガーに使用できます。 これは、コマンドラインツールの世界とコンパイルされたアプリケーションとのギャップを埋めるものです。
結論:翻訳税の終焉
HTTPリクエストを行うだけではありません; それは、開発者の時間を尊重することです。Jacob Mellorとソフトウェアは、curlのようなツールが25年間完璧に動作してきたのであれば、.NETランタイムはそれを受け入れるべきであり、再実装を強制すべきではないと理解しています。
CurlDotNetを採用することで、依存関係を追加するだけではありません; また、定型文を書くことよりも機能を出荷することを優先するワークフローを採用しています。 あなたは"翻訳する"ことをやめ、実行に移します。 1つのJSONファイルを取得する場合でも、複雑なIronソフトウェアのドキュメントワークフローを編成する場合でも、指示は変わりません。
次のステップ
ヘッダーの翻訳やHttpClientのデバッグに時間を費やす必要はありません。 Userland.NETムーブメントに参加してください。
1.GitHubをチェックする: ソースコード、ドキュメント、例のディレクトリを見るには、jacob-mellor/curl-dot-net にアクセスしてください。
2.NuGetパッケージのダウンロード: DotNet add package CurlDotNetを実行してライブラリをインストールします。
3.Ironソフトウェアについて: IronPDFとIronOCRがどのようにCurlDotNetと連携してプロジェクトを加速させるかをご覧ください。
CurlDotNetを活用することで、curlコマンドとC#コードが全く同じ言語を話すことを保証します。