Curl DotNet: Curl Süper Güçlerini .NET Çalışma Zamanına Getirmek
Her .NET geliştiricisi için durum oldukça tanıdıktır: Yeni bir API için dökümantasyon okuyorsunuz ve sağlayıcı bir uç noktayı test etmeniz için size bir curl komutu verir. Komut satırı aracı söz diziminin üzerinde göz gezdirirsiniz, iç çekersiniz ve bunu C#'ta yeni bir HttpClient örneğine dönüştürme işlemine başlarsınız.
Başlıkları elle eşleştirmeniz, gövde için dize değerinin doğru kodlandığından emin olmanız, kullanıcı aracısını (user agent) yönetmeniz ve sessiz bir varsayılanı kaçırmadığınızı ummanız gerekiyor. Bu manuel bash kopyalama ve çeviri işlemi hataya açıktır. Bir başlık eksik olduğunda, HTTP isteğiniz başarısız olur.
CurlDotNet girin. Iron Software'ın CTO'su Jacob Mellor tarafından oluşturulan bu .NET kütüphanesi, iş akışını tamamen değiştirir. Terminalden beklediğiniz aynı davranışla kodunuza curl komutlarını doğrudan yapıştırmanıza ve çalıştırmanıza olanak tanır.
Curl .NET nedir?
CurlDotNet, curl CLI aracının saf bir .NET uygulamasıdır. Diğer sarmalayıcıların aksine, bu kütüphanenin libcurl.dll gibi yerel bağımlılıkları yoktur. Tamamen yönetilen kod ile inşa edilmiştir, yani karmaşık kurulum olmadan Windows, Linux ve macOS üzerinde sorunsuz çalışır.
CurlDotNet, .NET çalışma zamanına gerçek curl söz dizimini getirir; ister Net Core'da bir web uygulaması, ister bir konsol uygulaması ya da CI boru hatları üzerinde çalışıyor olun.
Başlıca Özellikler
- Sıfır Çeviri: Curl HTTPS komutlarını doğrudan C# kaynağınıza yapıştırın.
Çapraz-Platform: Windows, Linux, MacOS ve daha fazlası için tam destek.
Tür Güvenliği: Bağımlılık enjeksiyonu senaryoları için akıcı bir oluşturucu kullanma seçeneği.
- Gözlemlenebilirlik: Günlük kaydı için yapılandırılmış olayları yaymak üzere yerleşik destek.
Başlarken: Kurulum ve Çalıştırma
Başlamak için, paket yöneticiniz aracılığıyla curldotnet paketini kurmanız gerekiyor. En son sürümü sürüm notlarında bulabilir veya basitçe çalıştırabilirsiniz:
dotnet add package CurlDotNetKurulum tamamlandıktan sonra, hemen bir curl çağrısı gerçekleştirebilirsiniz.
String API: Yapıştır ve Çalıştır Curl Komutları
Bu yöntem, sağlık kontrolü, destek temsilcileri veya hızlı prototipleme için mükemmeldir. Curl komutunu yalnızca bir dize olarak geçirirsiniz.
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);Imports CurlDotNet
' Simply paste the command string
Dim response = Await Curl.ExecuteAsync("curl https://api.github.com/users/octocat")
' Access the data
Console.WriteLine(response.Body)Ortam Değişkenleri ile Fluent Builder Kullanımı
Hassas verileri ortam değişkenleri aracılığıyla yönetmeniz gereken veya daha temiz bir mimari gereksinim duyduğunuz üretim uygulamaları için, fluent builder idealdir. Başlıklar için bir dize adı belirleyebilir veya bir dosya yolunu açıkça ayarlayabilirsiniz.
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();Dim response = Await Curl.GetAsync("https://api.example.com/data") _
.WithHeader("Authorization", "Bearer " & Environment.GetEnvironmentVariable("API_KEY")) _
.WithTimeout(TimeSpan.FromSeconds(30)) _
.ExecuteAsync()Iron Software Bağlantısı: Gerçek Dünya Entegrasyonları
CurlDotNet, geliştiricilerin en zor problemlerini çözmeye yönelik araçlar geliştiren Iron Software tarafından desteklenmektedir. Jacob Mellor, CurlDotNet'i, Iron Software süitini güçlendiren aynı felsefe ile yarattı: geliştirici deneyimi önceliklidir.
CurlDotNet'in gerçek gücü, Iron Software ürünleriyle birleştirildiğinde ortaya çıkar. Proxyleri, eski kimlik doğrulamalarını veya belirli curl http tuhaflıklarını ele alarak karmaşık taşıma katmanı için Curl, belge işlemenin ağır yükünü kaldırmak için ise Iron kütüphanelerini kullanabilirsiniz.
Örnek 1: IronPDF ile Güvenli PDF İndirme ve Düzenleme

IronPDF, .NET'te piksel mükemmelliğinde PDF'ler oluşturmak için endüstri standardıdır. IronPDF, diğer kütüphanelerin modern web standartlarıyla mücadele ettiği yerlerde, HTML, CSS ve JavaScript'i bir Chrome tarayıcı gibi tam olarak işler. Tam bir çözüm olarak tasarlanmıştır: HTML dizeleri veya dosyalardan yeni belgeler üretebilir, mevcut PDF'leri düzenleyebilir, belgeleri birleştirebilir ve sunucuda harici bağımlılıklar veya Adobe Acrobat yüklü olmadan filigranlama ve şifreleme gibi güvenlik özellikleri uygulayabilirsiniz.
Diyelim ki, SSL hatalarını göz ardı etmek veya belirli başlık permütasyonları gibi karmaşık curl bayraklarını gerektiren eski bir iç sistemden oluşturulmuş bir faturayı indirmeniz ve ardından IronPDF kullanarak filigran eklemeniz gerekiyor.
Bu isteği HttpClient'e çevirmek saatler süren hata ayıklama gerektirebilir. CurlDotNet ile komutu yapıştırır, baytları alır ve onları IronPDF'e teslim edersiniz.
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.");
}Imports CurlDotNet
Imports IronPdf
' 1. Use CurlDotNet to handle the complex transport
' We use -k to allow insecure SSL (common in legacy internal apps)
Dim curlCommand As String = "curl -k https://internal-billing.local/invoice/1234 -H 'X-Dept: Sales'"
Dim response = Await Curl.ExecuteAsync(curlCommand)
If response.IsSuccess Then
' 2. Pass the raw bytes directly to IronPDF
' IronPDF renders the PDF from the downloaded data
Dim 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.")
End IfKonsol Onayı

PDF Çıktısı

Örnek 2: IronOCR ile Verileri Kazıma ve OCR

IronOCR, özellikle C# ve .NET için ince ayarlanmış Tesseract 5 motoru tarafından desteklenen gelişmiş bir optik karakter tanıma kütüphanesidir. 127'den fazla dili destekler ve düşük çözünürlüklü taramalar, döndürülmüş görüntüler veya gürültülü arka planlar gibi kusurlu kaynaklardan metin okuma konusunda mükemmeldir. "Bilgisayarlı Görü" yetenekleri, metin bölgelerini otomatik olarak algılamasına olanak tanır ve verileri sadece düz metinler olarak değil, derin analiz için yapılandırılmış içerik (barkodlar, paragraflar, satırlar ve karakterler) olarak çıkartabilir.
Bazen standart .NET kazıyıcılarını engelleyen bir sunucuda barındırılan bir resimden veri çıkarmanız gerekir. CurlDotNet kullanarak bir standart tarayıcı kullanıcı aracısını zahmetsizce taklit edebilir, ardından metni okumak için IronOCR kullanabilirsiniz.
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}");
}Imports CurlDotNet
Imports IronOcr
' 1. Fetch the image using a specific browser User-Agent to bypass blocks
Dim 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
Dim ocr = New IronTesseract()
Using input = New OcrInput()
input.AddImage(imgResponse.BodyBytes)
Dim result = ocr.Read(input)
' 3. Output the extracted string value
Console.WriteLine($"OCR Result: {result.Text}")
End UsingOCR Örnek Çıktısı

Örnek 3: IronBarcode ile Envanter Yönetimi

IronBarcode, standart UPC'ler ve EAN'lardan karmaşık QR kodları ve Veri Matrisi etiketlerine kadar hemen hemen her barkod formatını okumak ve yazmak için tasarlanmış çok yönlü bir kütüphanedir. Hata toleransı için inşa edilmiştir; Kütüphane, hasar görmüş, eğimli veya kötü aydınlatılmış olsa bile barkodları tespit etmek için görüntüleri keskinleştirebilen, olası ikileştirebilen ve döndürebilen otomatik görüntü düzeltme filtreleri içerir. Bu, donanım tarayıcılarının mevcut olmadığı lojistik, perakende ve endüstriyel uygulamalar için vazgeçilmez bir araç haline getirir.
Bu senaryoda, CurlDotNet'in hassas ağ kontrolünü kullanarak güvenli bir API'den bir etiketi almak ve IronBarcode'un güçlü okuma motoru ile içeriği anında doğrulamak için kullanıyoruz.
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}");
}
}
}Imports CurlDotNet
Imports IronBarCode
Imports System.Net.Http
Module Program
Private ReadOnly client As New HttpClient()
Public Async Function Main(args As String()) As Task
' 1. Define the URL
Dim url As String = "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)
Dim imageBytes As Byte() = Await client.GetByteArrayAsync(url)
Console.WriteLine($"Downloaded {imageBytes.Length} bytes.")
' 3. Read the barcode directly from the byte array
Dim result = BarcodeReader.Read(imageBytes)
For Each barcode In result
Console.WriteLine($"Detected Format: {barcode.BarcodeType}")
Console.WriteLine($"Value: {barcode.Value}")
Next
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
End Function
End ModuleIronBarcode Konsol Çıktısı

"Userland"i .NET'e Getirmek
CurlDotNet, ".NET'e 'Userland' kavramını getirmek sadece istekler yapmaktan ibaret değildir." Linux, macOS veya Windows çalıştıran docker konteynerleri veya CI boru hatları gibi yerlerde standart curl işlevselliğini kullanmanıza olanak tanır.
Dosya indirmek, veri yüklemek veya bir .NET çalışma bağlamında standart bash sözdizimi kullanarak web kancalarını tetiklemek için kullanabilirsiniz. Bu, komut satırı araç dünyası ile derlenmiş uygulamanız arasındaki boşluğu kapatır.
Sonuç: Çeviri Vergisinin Sonu
Bu sadece HTTP istekleri yapmakla ilgili değil; Bu, geliştiricinin zamanına saygı göstermekle ilgilidir. Jacob Mellor ve Iron Software, curl gibi bir aracın 25 yıldır mükemmel bir şekilde çalışmış olması durumunda, .NET çalışma zamanı tarafından benimsenmesi gerektiğini, yeniden uygulanmaya zorlanmaması gerektiğini anlar.
CurlDotNet'i benimseyerek, yalnızca bir bağımlılık eklemekle kalmıyorsunuz; özellikleri yayınlamayı şablon yazmaya tercih eden bir iş akışı benimsiyorsunuz. Çeviri yapmayı bırakır ve çalıştırmaya başlarsınız. Tek bir JSON dosyası indiriyor veya karmaşık Iron Software doküman iş akışlarını yöneltiyor olun, talimat aynı kalır: yapıştırın, çalıştırın, tamam.
Sonraki Adımlar
Üstbilgileri çevirerek ve HttpClient'i hata ayıklayarak zaman kaybetmeyi bırakın. Userland.NET hareketine katılın.
GitHub'ı Kontrol Edin: Kaynak kodunu, belgelerini ve örnekler dizinini görmek için jacob-mellor/curl-.NET'i ziyaret edin.
NuGet Paketini İndirin: Kütüphaneyi yüklemek için .NET add package CurlDotNet komutunu çalıştırın.
- Iron Software'ı Keşfedin: IronPDF ve IronOCR'nin projelerinizi hızlandırmak için CurlDotNet ile nasıl birlikte çalışabileceğini görün.
CurlDotNet kullanarak, curl komutlarınızın ve C# kodunuzun tam olarak aynı dili konuşmasını sağlarsınız.
