Curl DotNet: Curl Süper Güçlerini .NET Çalışma Zamanına Taşımak
Her .NET geliştiricisi için senaryo çok tanıdıktır: Yeni bir API için belgeleri okurken, sağlayıcı size bir uç noktayı test etmek için bir curl komutu verir. Komut satırı aracının sözdizimine bakıyorsunuz, iç çekiyorsunuz ve bunu C#'da yeni bir HttpClient örneğine çevirmeye başlıyorsunuz.
Başlıkları manuel olarak eşlemeniz, gövde için dize değerinin doğru kodlandığından emin olmanız, kullanıcı aracını ele almanız ve sessiz bir varsayılanı kaçırmadığınızdan ummanız gerekiyor. Bu manuel bash kopyalama ve çeviri süreci hatalara açıktır. Bir eksik başlık, ve HTTP isteğiniz başarısız olur.
CurlDotNet sahneye girdi. Iron Software'in CTO'su Jacob Mellor tarafından oluşturulan bu .NET kütüphanesi iş akışını tamamen değiştiriyor. Curl komutlarınızı doğrudan kodunuza yapıştırmanıza ve terminalden beklediğiniz aynı davranışla çalıştırmanıza izin verir.
Curl DotNet Nedir?
CurlDotNet curl CLI aracının saf bir .NET uygulamasıdır. Diğer sarıcıların aksine, bu kütüphanenin yerel bağımlılıkları yoktur (libcurl.dll gibi). Tamamen yönetilen kodla inşa edilmiştir, yani Windows, Linux ve macOS'ta karmaşık kurulumlar olmadan sorunsuz çalışır.
Net Core üzerinde bir web uygulaması, bir konsol uygulaması veya CI hatlarını çalıştırıyor olun, CurlDotNet .NET çalışma zamanına gerçek curl semantiklerini getiriyor.
Temel Ö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 derleyici kullanma seçeneği.
- Gözlemlenebilirlik: Günlük kaydı için yapılandırılmış olaylar yaymak üzere yerleşik destek.
Başlarken: Kur ve Çalıştır
Başlamak için paket yöneticiniz üzerinden curldotnet paketini yüklemeniz gerekir. En son sürümünü sürüm notlarında bulabilir veya şu komutu çalıştırabilirsiniz:
dotnet add package CurlDotNetKurulduktan sonra, bir curl çağrısı hemen çalıştırabilirsiniz.
Dizgi API'si: Yapıştır ve Git Curl Komutları
Bu method sağlık kontrolleri, destek temsilcileri veya hızlı prototip oluşturma için mükemmeldir. Curl komutunu bir dize olarak geçirmeniz yeterlidir.
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 Akıcı Derleyici Kullanımı
Üretim uygulamalarında hassas verileri ortam değişkenleri aracılığıyla yönlendirmeniz gerektiğinde veya daha temiz bir mimari gerektirdiğinde, akıcı derleyici idealdir. Basliklar icin bir string adi belirleyebilir veya dosya yolunu acikca 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 Baglantisi: Gerçek-Dunya Entegrasyonlari
CurlDotNet, geliştiriciler icin en zorlu sorunlari cozmek amaciyla araclar geliştiren Iron Software tarafindan desteklenmektedir. Jacob Mellor, Iron Software Suite'ini guclendiren ayni felsefe ile CurlDotNet'i oluşturdu: geliştirici deneyimi once gelir.
CurlDotNet'in gerçek gucu, Iron Software urunleriyle birlestirildiginde ortaya cikar. Karmaşık taşıma katmani icin Curl'u (proxy'leri, eski doğrulama sistemlerini ya da belirli curl http tuhafliklarini yonetmek) ve belge işlemeyi agirdan alan Iron kitapliklarini kullanabilirsiniz.
Örnek 1: IronPDF Ile Guvenli PDF Indirme ve Duzenleme

IronPDF, .NET icin piksel-mükemmel PDF'ler oluşturmada endustri standardidir. Modern web standartlariyla bas edemeyen diğer kutuphanelerin aksine, IronPDF HTML, CSS, ve JavaScript'i Chrome tarayicisindaki gibi tam olarak render eder. Tam bir cozum olmak icin tasarlanmistir: HTML string'lerinden veya dosyalardan yeni belgeler oluşturabilir, mevcut PDF'leri duzenleyebilir, belgeleri birlestirebilir, ve guvenlik özellikleri uygulayabilir, bu islevler icin sunucuya Adobe Acrobat yuklu olmasina veya harici bagimliliklara ihtiyaç duymaz.
Kompleks curl bayraklari (or: SSL hatalarini gormezden gelmek veya belirli baslik kombinasyonlari) gerektiren, eski bir dahili sistemden oluşturulmus bir faturayi indirmeniz gerektigini ve ardindan onu IronPDF ile su isaretlemeyi hayal edin.
Bu talebi HttpClient'a cevirmek saatlerce debug gerektirebilir. CurlDotNet ile komutu yapistirir, baytlari alır ve bunları IronPDF'ye aktarırsınız.
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 Onayi

PDF Ciktisi

Örnek 2: IronOCR Ile Tarama ve OCR

IronOCR, ozel olarak C# ve .NET icin hassas ayarlanmis Tesseract 5 motoru ile guclendirilmis ileri duzey bir optik karakter tanima kutuphanesidir. 127'den fazla dili destekler ve kusurlu kaynaklardan metin okumakta ustalidir — dusuk cozunurluklu taramalar, donmus görüntüler veya arka plan gurultusu dusunun. "Bilgisayarlı Gorme" yetenekleri sayesinde metin bolgelerini otomatik olarak algilayabilir, veri cikislarini sadece duz metin olarak değil, derinlemesine analiz icin duzenlenmis içerik (barkodlar, paragraflar, satirlar ve karakterler) olarak da sunabilir.
Bazen standart .NET tarayicilarini engelleyen bir sunucuda barındırılan bir görüntüden veri cekmeniz gerekebilir. CurlDotNet'i standart bir tarayıcı kullanıcı aracı taklit etmek icin kolayca kullanabilir, sonra IronOCR'u kullanarak metni okuyabilirsiniz.
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 Ciktisi

Örnek 3: IronBarcode ile Envanter Yonetimi

IronBarcode, standart UPC'ler ve EAN'lerden karmaşık QR kodlari ve Veri Matrisi etiketlerine kadar neredeyse her barkod formatını okumak ve yazmak icin tasarlanmis çok yonlu bir kutuphanedir. Hat tolerance for designed (Fault Tolorance); Bu kutuphane icerisinde görüntüleri keskinlestiren, potansiyel olarak binarylasan ve donen oto görüntü düzeltmeleri içeren filtreler bulunur ve bu sayede zarar görmüş, eğik veya kotu aydınlatılmış bile olsalar barkodları algılayabilir. Bu, mühendislik, perakende ve endustriyel uygulamalarda donanim tarayicilarinin bulunmadigi durumlar icin onemli bir arac haline getirir.
Bu durumda, CurlDotNet'in hassas ağ kontrolunu guvenli bir API'den bir etiketi almak ve IronBarcode'un sağlam okuma motou kullanarak icerigi aninda doğrulamak icin 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 Çıkışı

"Userland" i .NET'e Getirmek
CurlDotNet'in ".NET'e Userland" konsepti getirmesi, sadece istek yapmaktan daha fazlasidir. CI hatlari veya Linux macOS veya Windows calistiran docker konteynirlarinda standart curl islevselliğini kullanmanıza imkan tanır.
DotNet çalıştırma bağlamında standart bash sözdizimi kullanarak dosyaları indirebilir, veri yukleyebilir veya web kancalarını tetikleyebilirsiniz. Bu, komut satırı araç dünyası ile derlenmiş uygulamanız arasında bir köprü oluşturmaktadır.
Sonuç: Çeviri Vergisinin Sonu
Bu sadece HTTP istekleri yapmakla ilgili değildir; Zamanın degerini bilmekle ilgilidir. Jacob Mellor ve Iron Software, curl gibi bir aracın 25 yıldır mükemmel çalıştıgını ve .NET çalıştırma ortamının bunu yeniden uygulamanız gerektiğinden değil, kabullendiğinden anladıgını bilir.
CurlDotNet'i kullanarak, sadece bir bağımlılık eklemiyorsunuz; Özellikleri gönderiyi koddan yazmayı değil, kodu başlangıç olarak benimseyen bir iş akışını benimsiyorsunuz. "Çeviri" yapmayı bırakip çalıştırmaya başlıyorsunuz. Tek bir JSON dosyasını topluyorsanız veya karmaşık Iron Software belge iş akışlarını düzenliyorsanız da, talimat aynı kalır: yapıştır, çalıştır, tamam.
Sonraki Adımlar
Başlik çevirisine ve HttpClient hatalarını ayıklamaya zaman harcamayı birakin. Userland.NET harekete katilin.
GitHub'u kontrol edin: Kaynak kodu, dokümantasyonu ve örnek dizininin tamamını görmek için jacob-mellor/curl-dot-net'i ziyaret edin.
NuGet Paketi'ni İndirin: Kutuphaneyi kurmak için DotNet add package CurlDotNet'i çalıştırın.
- Iron Software'ı Kesfedin: Projenizi hızlandırmak icin CurlDotNet ile birlikte IronPDF ve IronOCR'in nasıl birlikte çalışabileceğini gorün.
CurlDotNet'ı kullanarak, curl komutlarınızla C# kodlarınızın tam olarak ayni dili konuştuğunu sağlarsınız.
