3 puan yazan GN⁺ 2024-01-30 | 1 yorum | WhatsApp'ta paylaş

--libcurl kullanımı

  • libcurl kullanımı önerilir: Kullanıcıların önce curl komut satırı aracını kullanarak istedikleri aktarımı denemeleri, kabaca istedikleri gibi çalıştığında ise komut satırına --libcurl [dosya_adı] seçeneğini ekleyerek yeniden çalıştırmaları önerilir.
  • Kod üretimi: --libcurl komut satırı seçeneği, verilen dosya adıyla bir C programı üretir. Bu C programı, curl komut satırı aracının gerçekleştirdiği aktarımı yürütmek için libcurl kullanır.
  • İstisnalar ve farklar: Her zaman %100 aynı sonucu vermese de, kullanmak isteyeceğiniz libcurl seçenekleri ve ek argümanlar için mükemmel bir ilham kaynağı olabilir.

Örnek kod

  • Çalıştırma örneği: curl http://example.com --libcurl example.c komutu çalıştırıldığında, mevcut dizinde example.c dosyası oluşturulur.
  • Üretilen kod: Üretilen kod, curl_easy_setopt() kullanılarak yapılan çeşitli seçenek ayarlarını içerir; bazı seçenekler kaynaktan kolayca üretilemediği için bunları kullanıcının kendisi uygulaması gerekebilir ya da hiç kullanmayabilir.

GN⁺ görüşü

  • libcurl'ün faydası: Bu özellik, geliştiricilerin komut satırında çalışan curl komutlarını kolayca C programlarına dönüştürmesini sağlayarak libcurl kullanan uygulamaların geliştirilmesini hızlandırır.
  • Kod üretiminin avantajı: Otomatik üretilen kod, geliştiricilerin libcurl API'sini daha hızlı anlamasına ve uygulamasına yardımcı olabilir.
  • Öğrenme aracı olarak değeri: Başlangıç seviyesindeki yazılım mühendislerine libcurl seçeneklerini ve ağ programlamasının gerçek uygulama örneklerini gösteren iyi bir öğrenme kaynağı olabilir.

1 yorum

 
GN⁺ 2024-01-30
Hacker News yorumları
  • Tarayıcı geliştirici araçlarının Network sekmesinde istediğiniz isteği bulup “copy as curl” ile kopyaladıktan sonra, https://curlconverter.com/ gibi bir araçla kullandığınız dildeki istek koduna dönüştürme kalıbı çok iyi.
    Bir bakıma curl, her yere çevrilebilen bir ara temsil gibi kullanılıyor.

    • R kullanıcıları, httr’nin yakın zamanda yeniden yazılmış httr2 paketindeki curl_translate işleviyle “copy as curl” komutunu istek koduna dönüştürebilir.
      https://httr2.r-lib.org/reference/curl_translate.html
    • curlconverter.com hemen yer imlerine eklenecek kadar iyi görünüyor.
      Tarayıcının “copy as curl” özelliği kimlik doğrulama ve encoding header’ları kesin çalışır hâlde aldığı için, çok satırlı bir curl komutunu elle kurcalamaktan çok daha kullanışlı.
    • API endpoint’lerinde sorun giderme çok daha kolaylaştı.
      İstek parametrelerini değiştirip yerel instance’a gönderebilir, çıktıyı biçimlendirmek için jq’a pipe edebilirsiniz.
    • Bir endpoint çalışmadığında ilk adımın “curl ile çalışıyor mu?” olması gerçekten doğru bir gözlem.
    • HTTP’nin kendisinin bir ara temsile ihtiyacı yok ama cURL’ün evrenselliği yüzünden fiilen böyle çalışır hâle geldi.
      O kadar yaygın kullanılıyor ki istekleri cURL olarak dışa aktaran araçlar da, cURL’ü içe alan araçlar da ortaya çıktı.
  • Komut satırı arayüzünde, mevcut komutla aynı işi yapan program kaynak kodunu üreten bir flag olması oldukça harika.
    Kaputu açıp içeride neler olduğunu gösteriyor gibi; yalnızca davranışı daha iyi anlamayı sağlamakla kalmıyor, ihtiyaca göre değiştirmeyi veya genişletmeyi de kolaylaştırıyor.

    • Programlama kütüphanesi dokümantasyonu olarak da mükemmel.
      libcurl kullanırken range request gibi bir şeye ihtiyaç duyduysanız ya da tarayıcı Network sekmesinde “copy as curl” yaptıysanız, komut satırında çalıştırıp sadece --libcurl ekleyerek bunu C kütüphanesiyle tam olarak nasıl yapacağınızı görebilirsiniz.
    • Bu yaklaşımın Gnome ayarları, ağ ayarları, güvenlik duvarı ayarları GUI’si ve CLI komutlarıyla yapılabilen her şeye de uygulanması güzel olurdu.
  • Bu yaklaşım, Microsoft Office’in Visual Basic makrolarının başarılı olmasının nedenlerinden biriydi.
    Word veya Excel’de bir işlem yapıp oluşturulan makroya bakabiliyor, ardından kodu ihtiyacınıza göre düzeltebiliyordunuz. Basit ama güçlü bir kavram; curl’de de görmek sevindirici.

    • Microsoft da benzer şekilde kullanışlı bir araç yapmıştı; belirli bir Office belgesinin yapısını inceleyip onun bileşenlerini oluşturan C# kodunu görmenizi sağlıyordu.
      Uzun süredir güncellenmemiş gibi görünüyor: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
    • Bu tür şeyler için genelleştirilmiş bir kalıp olması muhtemel.
      Amiga’nın AREXX’i de akla geliyor.
    • Visual Studio’nun WPF editöründe görülen Excel tarafındaki paralel XAML/UI de benzer şekilde akla geliyor.
  • Derlemek için gcc’ye -lcurl ekleyerek libcurl linkleme işlemini belirtmek gerekiyor.
    Örneğin curl https://ifconfig.me --libcurl ip_fetcher.c ile IP adresini ve ip_fetcher.c dosyasını oluşturup, gcc -o ip_fetcher ip_fetcher.c -lcurl ile derledikten sonra ./ip_fetcher çalıştırılırsa IP adresi yazdırılır.
    Her gün C kodu yazmayan biri için bu temel linkleme adımı da yararlı bir bilgi.

    • Doğrudan cc komutu yazmak yerine make daha rahat geliyorsa daha kolay bir yol da var.
      curl https://ifconfig.me --libcurl ip_fetcher.c sonrasında make LDFLAGS=-lcurl ip_fetcher, ardından ./ip_fetcher çalıştırılabilir.
  • Biraz tanıtım yapmak gerekirse, Hurl libcurl kullanarak düz metinle HTTP istekleri çalıştıran ve test eden açık kaynaklı bir CLI.
    libcurl’ün yüksek güvenilirliğini ve HTTP/3 gibi özelliklerini kullanırken, istekleri zincirleme, yanıttan veri yakalayıp sonraki isteğe aktarma, JSONPath ve XPath gibi yanıt test özellikleri ekliyor.
    REST/SOAP/GraphQL API istekleri için söz dizimi kolaylıkları da var ama özünde sadece libcurl; verbose seçeneğiyle curl komutlarını da grep’leyebilirsiniz. Yönetici olarak katkı veriyorum.
    https://hurl.dev

  • Böyle bir özellik ffmpeg için de mümkün olsa güzel olurdu.

  • Daniel Stenberg ayrıntılara ve geliştirici/kullanıcı deneyimine gerçekten çok özen gösteriyor.
    Bu düzeyde incelik şaşırtıcı.

  • Daniel Stenberg’in curl komut satırı seçeneklerinin çoğunu gözden geçirdiği 3 saatlik videoda bu seçenekten bahsettiğini hatırlıyorum.
    https://www.youtube.com/watch?v=V5vZWHP-RqU

  • Gönderi başlığı tam genişlikte tire ve kısa çizgi kombinasyonu (—-) değil, iki tire (--) olmalı.

    • Footer’daki Contact bağlantısından operatöre e-posta gönderirseniz bunu görüp düzeltebilir.
  • Bu seçenek, özgün curl çağrısını saran script’in yerini alabilecek derlenebilir bir C programı oluşturduğu anlamına mı geliyor?

    • Evet. libcurl ile bu zaten mümkündü ama şimdiye kadar boilerplate kodu elle yazmak gerekiyordu.
    • Fikir şu: Üretilen C kodunu mevcut programa kopyalayıp yapıştırabilir ya da en azından söz konusu curl çağrısını yeniden üretmek için hangi libcurl API çağrılarının gerektiğini görmek üzere referans olarak kullanabilirsiniz.
    • Genel web sayfaları vb. için kullanışlı hâle getirmek adına muhtemelen birkaç parametreyi değiştirmeniz gerekir.
      Bunu, dokümanlarda saatlerce arama yapmaktan kurtaran bir başlangıç noktası olarak görmek daha doğru.