- wget को curl का सीधा प्रतिस्पर्धी नहीं, बल्कि काम के हिसाब से साथ इस्तेमाल किए जा सकने वाले कुछ हद तक overlap करने वाले फीचर्स वाला tool मानना चाहिए
- चुनाव का आधार tool preference नहीं, बल्कि यह होना चाहिए कि काम पूरा करने के लिए कौन-सा ज़्यादा उपयुक्त है; अगर wget बेहतर फिट है, तो wget इस्तेमाल करें
- curl और wget के technical differences और overlap वाले हिस्सों को एक नजर में दिखाने के लिए Venn diagram में व्यवस्थित किया गया है, और full-resolution image भी उपलब्ध है
- दोनों projects टकराव में नहीं हैं; curl की तरफ से wget में code contribute किया गया है और कई wget maintainers भी curl में contribute कर चुके हैं
- diagram में errors या omissions को update किया जा सकता है, और अलग comparison document व download tools comparison table में ज्यादा detail देखी जा सकती है
curl और wget को देखने का नज़रिया
- wget, curl का competitor कम और companion tool ज़्यादा है
- दोनों tools के कुछ features overlap करते हैं, लेकिन मुख्य बात किसी खास tool पर अड़े रहना नहीं, बल्कि जिस काम को solve करना है उसके हिसाब से चुनाव करना है
- अगर किसी situation में wget काम पूरा करने के लिए ज़्यादा suitable है, तो wget इस्तेमाल करना बेहतर है
Venn diagram में व्यवस्थित differences
- curl और wget के बीच के technical differences और कुछ similarities को visually दिखाने के लिए Venn diagram बनाया गया है
- diagram image पर click करने पर full-resolution version देखा जा सकता है
- अगर कोई problem या missing item मिले तो बताने का अनुरोध है, और ज़रूरत पड़ने पर diagram update किया जा सकता है
projects के बीच collaboration
- curl की तरफ से wget में code contribute किया गया है
- कई wget maintainers भी curl में contribute कर चुके हैं
- दोनों projects का रिश्ता competition या confrontation से ज़्यादा collaboration जैसा है
और देखने लायक comparison resources
- curl vs wget: curl और wget comparison document
- Compare curl with other download tools: curl और अन्य download tools की comparison table
- OpenHub’s curl vs wget table: OpenHub की curl-vs-wget comparison table
1 टिप्पणियां
Hacker News की राय
मुझे लगता है कि Wget वाले हिस्से में कम से कम sensible defaults, resume और error होने पर retry भी शामिल करने चाहिए
हाल ही में मुझे unstable connection पर एक बहुत बड़ी file download करने के लिए script लिखनी पड़ी, और engineers के बीच आम धारणा थी कि ऐसे काम के लिए Wget इस्तेमाल करना चाहिए
मैंने curl भी आज़माया, लेकिन default state में resume या retry नहीं हुआ, और manual पढ़कर कई options और arguments specify करने पड़े। लगा कि यह behavior default होना चाहिए
Wget में crash के बाद तक सहित हर स्थिति में resume enable करने के लिए सिर्फ
--continueoption काफी था, और manual के introduction में भी लिखा है कि इसे slow या unstable network पर robust तरीके से काम करने के लिए design किया गया है, और download fail होने पर पूरी file मिलने तक retry करता रहता हैcurl में भी खराब connection पर reliably काम करने के लिए सभी options set किए जा सकते हैं, लेकिन Wget में वह default behavior पहले से on लगता है, इसलिए जिन error conditions को मैं खुद test नहीं कर पाया, उनमें भी expected behavior करेगा, इस पर भरोसा होता है। HTTP protocol update होने पर भी नया Wget default रूप से support करने की संभावना रखता है, लेकिन curl में improved behavior enable करने के लिए नया switch चाहिए हो सकता है, और product release के बाद उसे add नहीं किया जा सकता
मेरे लिए curl एक शानदार और बेहद versatile low-level tool है, और उसका CLI भी उसी nature को reflect करता है, लेकिन रोज़मर्रा के कामों में Wget default state में कहीं बेहतर काम करता है, इसलिए मैं उसे prefer करता हूँ। manual भी जल्दी skim किया जा सकता है, शायद इसलिए कि यह यहाँ बताए गए सभी obscure protocols को support नहीं करता
सिर्फ
wget urlसे URL download होकर save हो जाता है, command-line use में इसी बात से Wget जीतता हैcurlमें भी ठीक वही feature है। resume के लिए-Cflag है, और retry के लिए--retryहैव्यक्तिगत रूप से मुझे curl के defaults भी काफी sensible लगते हैं, और curl जैसे tool में इन दोनों में से कोई भी चीज default रूप से on नहीं चाहिए
-iभी जोड़ना चाहिएखासकर
wget -i -standard input से पढ़ता है, इसलिए pipelines में बहुत काम का हैमेरी जानकारी में curl यह नहीं कर सकता। आमतौर पर
xargsइस्तेमाल करने को कहा जाता है, लेकिन वह सभी URL आने तक इंतज़ार करके curl चलाता है, इसलिए URL generate करने वाली command और download command के बीच की parallelism छोड़नी पड़ती है, जिससे वह replacement के तौर पर थोड़ा awkward हैपहले manual पढ़ा हो तब भी सही flag याद रखना आसान नहीं होता, और generated command-line को verify करना आमतौर पर manual पढ़कर शुरू से assemble करने से कम मेहनत वाला होता है
modern web में कभी-कभी अपनी script में Puppeteer जैसे tools इस्तेमाल करना ज्यादा आसान होता है। खासकर अगर जिस site से interact कर रहे हों वह JavaScript-heavy हो तो और भी
उदाहरण के लिए
$ curl -sSLOJ 'example.com/file name.txt'सेcurl: (3) URL using bad/illegal format or missing URLerror आता है, और$ curl -sSLOJ 'example.com/file%20name.txt'file%20name.txtनाम की file बनाता हैदूसरी ओर wget बिना extra flag के दोनों URL से
"file name.txt"नाम की file बनाता है। हालांकि यह example URL 404 है, इसलिए strictly wget में--content-on-errorभी लगाना पड़ेगाकई लोगों के लिए मुख्य फर्क शायद default रूप से standard output पर लिखने वाला tool और default रूप से file बनाने वाला tool होगा
shमें pipe किया जा सकने वाला tool ;-)मेरे लिए Wget की निर्णायक feature यह है कि यह default रूप से URL से निकले filename के साथ file download करता है
wget url://to/file.htmचलाने पर current working directory में"file.htm"नाम की file बन जाती हैcurl में
curl url://to/file.htm > file.htmजैसा लिखना पड़ता है, या उससे कम convenient कोई और command spell इस्तेमाल करनी पड़ती हैcurl -Ohttps://curl.se/docs/manpage.html#-O
wget "url://to/file.htm?uid=foo&q=bar&rnd=4"जैसे cases भी होते हैंcurl -Oज्यादा convenient हैउस “decisive feature” को
catसे compare करें तोcat file.htmlकाcat file.html > file.htmlबन जाना जैसा है। फिर जब असल में copy नहीं बल्कि output चाहिए हो, तोcat file.html -o -जैसा कुछ लिखना पड़ेगा, इसलिए मुझे खुशी है कि curl में ऐसी feature नहीं हैDaniel Stenberg उन दुर्लभ developers में हैं जो अपनी creation में दिल और आत्मा लगा देते हैं
modern Big Tech में shadow जैसे developers money-making machine के replaceable cogs जैसे दिखते हैं, और ऐसी quality धीरे-धीरे गायब होती लगती है
लगता है वह curl को IT दुनिया में अपनी छोड़ी हुई छाप की तरह treat करते हैं
बेशक आजकल कई मामलों में यह सचमुच technical रूप से बेहतर भी होता है, जिससे choice आसान हो जाती है
यह comparison थोड़ा पुराना लगता है। उदाहरण के लिए diagram में Wget side में नीचे वाली दोनों चीजें missing हैं
HTTP PUTwget --method=PUT --body-data=से possible है, और proxy व HTTPS भीwget --use-proxy=on --https_proxy=[https://example.com](<https://example.com>)की तरह possible हैंcurl में consistently ज्यादा options और flexibility हैं, लेकिन Venn diagram के right side में मौजूद कई items में से कुछ Wget भी कुछ हद तक कर सकता है
वाह, मुझे नहीं पता था कि curl इतने सारे protocols support करता है। फिर भी छोटा intersection area शायद वह हिस्सा है जिसे curl/Wget users में से 90% से ज्यादा लोग असल में इस्तेमाल करते होंगे
developer के नजरिए से overlapping area इतना बड़ा नहीं है, लेकिन user के नजरिए से यह कहीं बड़ा दिख सकता है
article में मुझे सबसे अच्छा यह वाक्य लगा
“मैंने wget में code contribute किया है। कई wget maintainers ने भी curl में contribute किया है। हम सभी दोस्त हैं।”
Daniel Stenberg की बनाई comparison भी जरूर देखनी चाहिए
https://daniel.haxx.se/docs/curl-vs-wget.html
पहले जब किसी website को mirror करना होता था तो Wget इस्तेमाल करता था। Wget एक specialized tool है
curl एक general-purpose request library है जिसके साथ CLI frontend है, और यह दूसरे programs में embed भी होता है या PHP वगैरह की standard library API की तरह इस्तेमाल किया जाता है
सबसे common usage शायद दोनों के overlapping हिस्से में होगा। इसलिए मैं ऐसा Venn diagram देखना चाहूँगा जो दिखाए कि कौन-से operating systems और Docker images में कौन-सा tool default रूप से installed है