3 पॉइंट द्वारा GN⁺ 2024-01-30 | 1 टिप्पणियां | WhatsApp पर शेयर करें

--libcurl का उपयोग

  • libcurl के उपयोग की सिफारिश: उपयोगकर्ताओं को पहले curl कमांड-लाइन टूल का उपयोग करके मनचाहा ट्रांसफर आज़माने की सलाह दी जाती है, और जब वह लगभग इच्छित रूप से काम करने लगे, तब कमांड-लाइन में --libcurl [फ़ाइलनाम] विकल्प जोड़कर उसे फिर से चलाएँ।
  • कोड जनरेशन: --libcurl कमांड-लाइन विकल्प दिए गए फ़ाइलनाम के साथ एक C प्रोग्राम बनाता है। यह C प्रोग्राम libcurl का उपयोग करके वही ट्रांसफर चलाता है जो curl कमांड-लाइन टूल ने किया था।
  • अपवाद और अंतर: यह हमेशा 100% एक जैसा नहीं होता, लेकिन जिन libcurl विकल्पों और अतिरिक्त arguments का आप उपयोग करना चाहते हैं, उनके लिए यह बेहतरीन प्रेरणा दे सकता है।

उदाहरण कोड

  • चलाने का उदाहरण: curl http://example.com --libcurl example.c कमांड चलाने पर मौजूदा डायरेक्टरी में example.c फ़ाइल बन जाती है।
  • जेनरेट किया गया कोड: बने हुए कोड में curl_easy_setopt() का उपयोग करके कई तरह की option settings शामिल होती हैं, और कुछ options ऐसे हो सकते हैं जिन्हें source से आसानी से जनरेट नहीं किया जा सकता, इसलिए उपयोगकर्ता को उन्हें खुद लागू करना पड़ सकता है या उनका उपयोग न करना पड़े।

GN⁺ की राय

  • libcurl की उपयोगिता: यह फीचर डेवलपर्स को कमांड-लाइन पर काम करने वाले curl कमांड को आसानी से C प्रोग्राम में बदलने में मदद करता है, जिससे libcurl का उपयोग करने वाले applications का विकास तेज़ होता है।
  • कोड जनरेशन के फ़ायदे: अपने-आप जेनरेट किया गया कोड डेवलपर्स को libcurl API को अधिक तेज़ी से समझने और लागू करने में मदद कर सकता है।
  • सीखने के टूल के रूप में मूल्य: शुरुआती software engineers के लिए यह libcurl options और network programming के वास्तविक उपयोग के उदाहरण दिखाने वाला अच्छा learning material हो सकता है।

1 टिप्पणियां

 
GN⁺ 2024-01-30
Hacker News की राय
  • ब्राउज़र developer tools के network tab में मनचाहा request ढूँढकर उसे “copy as curl” से कॉपी करना, फिर https://curlconverter.com/ जैसे टूल से उसे अपनी इस्तेमाल की भाषा के request code में बदलना, एक बहुत अच्छा पैटर्न है
    एक तरह से curl को हर जगह अनुवाद किए जा सकने वाले intermediate representation की तरह इस्तेमाल किया जाता है

    • R यूज़र httr के हाल में दोबारा लिखे गए httr2 पैकेज की curl_translate फ़ंक्शन से “copy as curl” कमांड को request code में बदल सकते हैं
      https://httr2.r-lib.org/reference/curl_translate.html
    • curlconverter.com इतना अच्छा लग रहा है कि तुरंत bookmark कर लेने लायक है
      ब्राउज़र का “copy as curl” authentication और encoding headers के सही काम करने वाली स्थिति को वैसे का वैसा ले आता है, इसलिए खुद से multi-line curl command से छेड़छाड़ करने से यह कहीं ज़्यादा सुविधाजनक है
    • API endpoint की troubleshooting करना इससे बहुत आसान हो गया है
      request parameters बदलकर उसे local instance पर भेज सकते हैं, या jq में pipe करके output format को सँवार सकते हैं
    • जब endpoint काम न करे, तो पहला कदम “क्या curl से चलता है?” होना सच में बिल्कुल सही अवलोकन है
    • HTTP को अपने आप में किसी intermediate representation की ज़रूरत नहीं है, लेकिन cURL की सर्वव्यापकता की वजह से व्यवहार में यह वही भूमिका निभाने लगा है
      यह इतना व्यापक है कि request को cURL में export करने वाले टूल भी हैं, और cURL को import करने वाले टूल भी
  • यह काफ़ी शानदार है कि command-line interface में ऐसा flag है जो मौजूदा command जैसा ही काम करने वाला program source code उगल देता है
    यह जैसे bonnet खोलकर अंदर क्या हो रहा है दिखा देता है; इससे न सिर्फ़ कामकाज बेहतर समझ में आता है, बल्कि अपनी ज़रूरत के मुताबिक उसे बदलना या बढ़ाना भी आसान हो जाता है

    • यह programming library documentation के तौर पर भी बेहतरीन है
      अगर आप libcurl इस्तेमाल कर रहे हों और आपको range request जैसी किसी चीज़ की ज़रूरत पड़ जाए, या आपने ब्राउज़र network tab में “copy as curl” किया हो, तो command line पर उसे चलाकर सिर्फ़ --libcurl जोड़ दें और आपको ठीक-ठीक पता चल जाएगा कि C library में यह कैसे करना है
    • अच्छा होगा अगर यह तरीका Gnome settings, network settings, firewall settings GUI, और उन सभी चीज़ों पर लागू हो सके जिन्हें CLI command से चलाया जा सकता है
  • यह तरीका Microsoft Office के Visual Basic macro के सफल होने की एक वजह था
    आप Word या Excel में कोई काम करते थे, फिर बने हुए macro को देखते थे, और कोड को अपनी ज़रूरत के हिसाब से बदल सकते थे। यह सरल लेकिन शक्तिशाली विचार है, इसलिए इसे curl में देखना अच्छा लगता है

    • Microsoft ने भी ऐसा ही एक उपयोगी टूल बनाया था, जो किसी खास Office document की संरचना देखने और उसके हिस्से बनाने वाला C# code दिखाने देता था
      लगता है इसे काफ़ी समय से अपडेट नहीं किया गया: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
    • लगता है इसमें कोई सामान्यीकृत पैटर्न हो सकता है
      Amiga का AREXX भी याद आता है
    • Visual Studio के WPF editor में दिखने वाले Excel के समानांतर XAML/UI की भी याद आती है
  • compile करने के लिए gcc में -lcurl जोड़कर libcurl linking बतानी पड़ती है
    उदाहरण के लिए, curl https://ifconfig.me --libcurl ip_fetcher.c से IP address और ip_fetcher.c बना लें, फिर gcc -o ip_fetcher ip_fetcher.c -lcurl से compile करें, और ./ip_fetcher चलाएँ तो IP address प्रिंट हो जाएगा
    जो लोग रोज़ C code नहीं लिखते, उनके लिए linking का यह बुनियादी कदम भी उपयोगी जानकारी है

    • अगर सीधे cc command टाइप करने से make ज़्यादा आसान लगे, तो इससे भी सरल तरीका है
      curl https://ifconfig.me --libcurl ip_fetcher.c के बाद make LDFLAGS=-lcurl ip_fetcher, फिर ./ip_fetcher चलाएँ
  • थोड़ी self-promotion करूँ तो Hurl, libcurl का इस्तेमाल करने वाला एक open source CLI है, जो plain text में HTTP request चलाने और test करने देता है
    यह libcurl की ऊँची reliability और HTTP/3 जैसी सुविधाएँ इस्तेमाल करता है, और साथ में request chaining, response से data capture करके अगली request में पास करना, तथा JSONPath·XPath जैसे response test features भी जोड़ता है
    REST/SOAP/GraphQL API requests के लिए कुछ syntax sugar भी है, लेकिन मूल में यह बस libcurl ही है, और verbose option इस्तेमाल करें तो curl command को grep भी कर सकते हैं। मैं इसके maintainers में से एक हूँ
    https://hurl.dev

  • अच्छा होगा अगर ऐसी सुविधा ffmpeg में भी हो

  • Daniel Stenberg details और developer·user experience दोनों का सच में बहुत बारीकी से ध्यान रखते हैं
    इस स्तर की polish काफ़ी हैरतअंगेज़ है

  • याद है कि Daniel Stenberg ने खुद curl command-line options के ज़्यादातर हिस्सों पर एक 3 घंटे के वीडियो में इस option का ज़िक्र किया था
    https://www.youtube.com/watch?v=V5vZWHP-RqU

  • submission title में full-width dash और hyphen के संयोजन(—-) की जगह दो hyphen(--) होने चाहिए

    • footer के Contact link से ऑपरेटर को email भेजें, तो वे इसे देखकर ठीक कर सकते हैं
  • क्या इस option का मतलब यह है कि यह मूल curl call को wrap करने वाली script की जगह लेने वाला compile किया जा सकने वाला C program बना देता है?

    • हाँ। libcurl से यह पहले से संभव था, लेकिन अब तक boilerplate code खुद लिखना पड़ता था
    • विचार यह है कि बने हुए C code को मौजूदा program में copy-paste किया जा सकता है, या कम से कम किसी खास curl call को दोहराने के लिए किन libcurl API calls की ज़रूरत है, यह देखने के संदर्भ के रूप में इस्तेमाल किया जा सकता है
    • आम web pages वगैरह में उपयोगी ढंग से इस्तेमाल करने के लिए शायद कुछ parameters बदलने पड़ेंगे
      इसे इस तरह देखना बेहतर है कि यह कई घंटे documentation खंगालने से बचाने वाला एक शुरुआती बिंदु है