Her iki de HTTP üzerinden veri alan, neredeyse her bilgisayarda yüklü olan, durmadan karşılaştırılan ve nadiren yararlı bir şekilde birbirinden ayrıştırılan iki komut satırı aracı.
Bu iki araç arasındaki fark konusunda en güvenilir kaynak, sevindirici bir şekilde, curl’ün kendi bakımcısının yayınladığı karşılaştırma — bu belgede, wget’in curl’den daha iyi yaptığı konulara dair açık bir bölüm de yer alıyor. Aşağıdaki her bir olgusal iddia, kişisel izlenimlere değil, bu belgeye veya projelerin kendi kılavuzlarına dayanmaktadır; bu, genellikle hafızadan yazılan bu tür karşılaştırmalarda önemlidir.
Biz Geonode olarak proxy satıyoruz ve dürüstçe şunu belirtmeliyiz: Kullanıcıların bu araçları kullandıkları amaçların büyük çoğunluğu için hiçbirine proxy gerekmez. Bir dosyayı indirmek, bir API'yi çağırmak, bir hizmetin yanıt verip vermediğini kontrol etmek — bunların hiçbiri proxy gerektirmez. İki araç arasında proxy desteği konusunda gerçek ve yeterince belgelenmemiş bir fark var; buna aşağıda bir bölüm ayrılmıştır, ancak buraya bir indirme aracı seçmeye çalışırken geldiyseniz, bu kısmı güvenle göz ardı edebilirsiniz.
Kısaca özetlemek gerekirse, bu araçlar farklı zihinsel modellerle geliştirilmiştir ve neredeyse tüm yüzeysel farklılıklar bundan kaynaklanmaktadır. curl, cat gibi davranır — bir şeyi alır ve standart çıktıya yazar. wget, cp gibi davranır — bir şeyi alır ve bir dosyaya yazar. Bu, bakımcının kendi çerçevelemesidir ve bunu bir kez anladığınızda, varsayılan yönlendirmeler, bayrak farklılıkları ve özyineleme yeteneği artık keyfi olmaktan çıkar.
Ayrıntılara girmeden önce kısa bir öneri: diskte dosya istiyorsanız wget’i, diğer her şey için curl’ü kullanın.
Tek Cümlelik Fark
curl, bakımcısının ifadesiyle, “geleneksel Unix cat
komutu gibi” çalışır. wget ise “daha çok cp
gibi” çalışır.
Bu tek fark, aşağıda anlatılacakların çoğunu açıklıyor.
Pratikte Ne Anlama Gelir?
curl https://example.com/file.txt # prints the contents to your terminal
wget https://example.com/file.txt # saves file.txt to the current directory
İkisi de yanlış değildir. Farklı sorulara cevap vermektedirler.
curl'un tasarımı, veriyi istediğinizi ve bundan sonra ne olacağının size kalmış olduğunu varsayar — veriyi boru hattına aktarın, ayrıştırın, yönlendirin, okuyun. Standart çıktıya yazmak, birleştirilebilir bir seçimdir ve bu yüzden curl, kabuk boru hatlarına doğal bir şekilde uyum sağlar.
wget'in tasarımı, dosyayı istediğinizi varsayar. Dosya adını seçer, dosyayı oluşturur, bir ilerleme çubuğu gösterir ve diskte bir şey bırakarak işlemi tamamlar.
Sonuçların Göründüğünden Daha Büyük Olmasının Nedeni
Bir aracın görevi “dosyayı diske aktarmak” olduğunda, bir dizi davranış açıkça doğru hale gelir: dosya yer değiştirdiği için yönlendirmeleri takip etmek; amaç deneme değil dosya olduğu için başarısızlık durumunda yeniden denemek; yarım kalan bir indirmeyi devam ettirmek, çünkü dosyanın yarısı işin tamamı değildir. wget tüm bunları varsayılan olarak yapar.
Bir aracın görevi “bu aktarımı gerçekleştir ve sonucu bana ver” olduğunda, doğru davranışlar farklıdır: benim adıma karar vermek yerine ne olduğunu bildir, tam olarak isteneni yap ve gerisini çağıran kişinin halletmesine izin ver. curl, yönlendirmeyi bildirir ve durur; çünkü yönlendirmeyi takip etmek, sizin istediğiniz şey değildi.
Her iki varsayılan davranış da birbirinden daha iyi değildir. Bunlar farklı amaçlarla tutarlıdır ve kullanıcıların her iki araçla ilgili yaşadıkları hayal kırıklıklarının çoğu, diğer aracın varsayımlarını beklemelerinden kaynaklanır.
Curl'un Yaptığı, Wget'in Yapmadığı Şeyler
Bakım sorumlusunun karşılaştırmasına göre; bu oldukça kapsamlı bir liste.
Öncelikle Bir Kütüphanedir
curl, “herkes tarafından kullanılabilen kararlı bir API’ye” sahip olduğu belirtilen libcurl’ü içerir. Bu, en önemli farktır ve terminal üzerinden bakıldığında en az göze çarpan farktır.
libcurl, dil bağlamaları, uygulamalar ve cihazlar dahil olmak üzere çok sayıda yazılıma entegre edilmiştir. Komut satırı aracı, bir anlamda kütüphanenin bir gösterimidir. wget bir programdır; curl ise diğer programların kullandığı bir kütüphane üzerine kurulu bir programdır.
PHP'nin cURL işlevlerini veya libcurl üzerine kurulu bir dil HTTP bağlayıcısını daha önce kullandıysanız, curl komutunu çalıştırmadan curl'ü kullanmış olursunuz.
Çok Daha Fazla Protokol
Yayınlanan liste uzundur: "FTP(S), GOPHER(S), HTTP(S), SCP, SFTP, TFTP, TELNET, DICT, LDAP(S), MQTT, FILE, POP3(S), IMAP(S), SMB(S), SMTP(S), RTMP, RTSP ve WS(S)".
wget, HTTP, HTTPS ve FTP'yi destekler. Web için bu genellikle yeterlidir. Posta protokolleri, SFTP, MQTT veya WebSocket ile ilgili her şey için, bu ikiliden sadece curl kullanılabilir.
Daha Yeni HTTP Sürümleri
curl, HTTP 0.9, 1.0, 1.1, 2 ve 3 sürümlerini destekler. Bir sunucunun özellikle HTTP/2 veya HTTP/3 üzerinden nasıl davrandığını test etmeniz gerekiyorsa, bu iş curl'e aittir.
Daha Fazla Proxy Türü
curl, HTTPS proxy'lerini ve SOCKS4 ile SOCKS5 proxy'lerini destekler. Bu, wget’te olmayan ancak curl’da bulunan özellikler arasında yer alır ve gerçek sonuçları vardır — aşağıdaki proxy bölümüne bakın.
Paralel Aktarımlar
curl, -Z ile birden fazla aktarımı aynı anda gerçekleştirebilir. Tek tek yapıldığında gecikmenin belirleyici olduğu çok sayıda küçük kaynağı alırken kullanışlıdır.
İki Yönlü Aktarım ve Form Yüklemeleri
Sadece veri almakla kalmaz, veri de gönderir. Çok parçalı form yüklemeleri, PUT, isteğe bağlı yöntemler. wget temelde bir veri alma aracıdır; curl ise bir aktarım aracıdır ve yüklemeler bu araçta birinci sınıf bir kullanım örneğidir.
Zaten Daha Fazla Bilgisayarda Yüklü
curl, macOS ile Windows 10 ve 11’de önceden yüklenmiş olarak gelir. Hiçbir şey eklenmemiş bir Windows bilgisayarında curl kullanılabilirken, wget genellikle kullanılamaz — bu durum, platformlar arası komut dosyaları için olması gerekenden daha fazla önem taşır.
Wget'in Yaptığı, Curl'ün Yapamadığı Şeyler
Bu listeye güvenilmesini sağlayan şey, bilgilerin curl'ün kendi bakım sorumlusundan gelmesidir.
Özyinelemeli İndirme
"Wget'in curl'e kıyasla en büyük gücü, özyinelemeli indirme yeteneğidir."
Bu çok önemli bir özelliktir ve hiç de önemsiz bir şey değildir. wget, bir sayfadaki bağlantıları takip edebilir ve bulduklarını belirlenen bir derinliğe kadar indirebilir; bu sırada bağlantıları yerel tarama için dönüştürür. Çevrimdışı okumak üzere bir dokümantasyon sitesini yedeklemek tek bir komutla yapılır.
wget -r -np -k -p https://example.com/docs/
Yinelemeli, üst dizinler yok, bağlantıları yerel görüntüleme için dönüştürür, resimler ve stil sayfaları gibi sayfa gereksinimlerini alır.
curl bunu hiç yapamaz. curl, ona verdiğiniz URL'leri alır. HTML'yi ayrıştırmaz, bağlantıları keşfetmez ve site kavramı yoktur. İşiniz "bir web sitesinin bu bölümünü kopyalamak" ise, wget doğru seçimdir ve denemeye değer bir curl eşdeğeri yoktur.
Kesintiye Uğrayan İletimlerin Devam Ettirilmesi
wget "erken kesintiye uğrayan bir iletimden kurtulabilir ve indirmeye devam edebilir". -c komutuyla, kesintiye uğrayan bir indirme işlemi durduğu yerden devam eder.
curl de -C - ile bunu yapabilir, ancak wget'in yeniden deneme ve devam ettirme konusundaki davranışı daha otomatik ve daha esnektir — bu, aktarım büyük ve bağlantı güvenilir olmadığında önemlidir.
Basit Durumlarda Seçeneğe Gerek Yok
wget, hiçbir seçenek belirtilmeden bir dosyayı indirir. curl ise terminale değil bir dosyaya yazmak için "-o veya -O" seçeneklerine ihtiyaç duyar.
Her iki araçla da herkesin en sık gerçekleştirdiği tek görev olan "bu dosyayı indir" işlemi için wget daha kısa bir komuttur ve günlük olarak kullandığınız bir araçta komutun kısa olması gerçek bir avantajdır.
İndirme İçin Daha Mantıklı Varsayılan Ayarlar
wget "varsayılan olarak daha fazla özelliği etkinleştirir: çerezler, yönlendirmeleri takip etme, zaman damgası".
Zaman damgası özellikle dikkat çekicidir: -N seçeneğiyle wget, yalnızca uzak sunucudaki sürüm daha yeni ise dosyayı yeniden indirir. Bir dizi dosyanın zamanlanmış senkronizasyonu için bu tam olarak doğru davranıştır ve curl’da buna doğrudan karşılık gelen bir özellik yoktur.
Lisans
wget, GPL v3 lisanslıdır; curl ise MIT lisanslıdır. Her ikisini de bir ürüne entegre ediyorsanız, bu fark muhtemelen bu sayfadaki herhangi bir özellikten daha önemli olacaktır.
Zaman Kaybına Neden Olan Varsayılan Ayarlar
Kafanızı karıştıracak bir öğleden sonra geçirmenize yol açması en muhtemel farklılıklar.
Yönlendirmeler
wget varsayılan olarak yönlendirmeleri takip eder. curl ise takip etmez.
Bu, "curl neden hiçbir şey döndürmedi" sorusunun en yaygın tek nedenidir. Sunucu 301 koduyla yanıt verdi, curl bunu bildirdi ve durdu; standart çıktı ise boş görünüyor.
curl -L https://example.com/moved # follow them
wget https://example.com/moved # already following them
Bu, curl’da bir ihmal değildir. Yönlendirmeyi takip etmek, istemediğiniz bir isteği, adını belirtmediğiniz bir ana bilgisayara göndermek anlamına gelir ve curl’un çalışma modeli, kendisine söyleneni yapmak ve geri kalanını bildirmektir. wget’in çalışma modeli ise dosyayı almaktır ve dosya taşınmıştır.
Çıktı Hedefi
Yukarıda ele alınmış olsa da, kullanıcıları sürekli yanıltması nedeniyle tekrar edilmeye değer. curl URL komutu çıktıyı yazdırır; wget URL komutu dosyayı kaydeder.
Hata İşleme
Her ikisinin de kendine özgü bir özelliği vardır. curl, 404 kodunu başarılı bir aktarım olarak değerlendirir ve sıfır çıkış koduyla sonlanır — aktarım başarılı oldu, sunucu yanıt verdi. HTTP hatalarının sıfırdan farklı bir çıkış durumu üretmesini sağlamak için -f komutunu kullanın.
wget, varsayılan olarak HTTP hatalarında sıfırdan farklı bir çıkış durumu verir; bu, bir indirme aracı için daha sezgisel bir davranıştır.
Komut dosyalarında: curl -sSf hatırlamaya değer bir kombinasyondur ve bunun eksikliği, bozuk bir işin çalışıyor gibi görünmesinin yaygın bir nedenidir.
Yeniden Denemeler
wget varsayılan olarak yeniden deneme yapar. curl ise --retry ile talep etmediğiniz sürece yeniden deneme yapmaz.
Yine modellerle tutarlı olarak: bir indirme aracı ısrarcı olmalı, bir aktarım aracı ise durumu bildirmelidir.
Pratik Tavsiye
Otomatikleştirilmiş herhangi bir şey yazıyorsanız, her iki aracın varsayılan ayarlarına güvenmek yerine davranışı açıkça belirleyin. curl -sSfL --max-time 30 ne istediğinizi açıklar. wget --tries=3 --timeout=30 de öyle. Açık komutlar, bir yıl sonra başka biri tarafından okunduğunda da anlamını korur.
Yan Yana
| Görev | curl | wget |
|---|
| Terminale yazdır | curl URL | wget -O - URL |
| Dosyaya kaydet | curl -O URL | wget URL |
| Seçilen adla kaydet | curl -o name URL | wget -O name URL |
| Yönlendirmeleri takip et | curl -L URL | varsayılan |
| İndirmeyi devam ettir | curl -C - -O URL | wget -c URL |
| Yalnızca başlıklar | curl -I URL | wget --spider -S URL |
| Özel başlık | curl -H "K: V" URL | wget --header="K: V" URL |
| Temel kimlik doğrulama | curl -u user:pass URL | wget --user=u --password=p URL |
| POST verileri | curl -d "a=b" URL | wget --post-data="a=b" URL |
| Sessiz | curl -s URL | wget -q URL |
| Siteyi yansıt | mümkün değil | wget -m URL |
| Dosya yükleme | curl -T file URL | mümkün değil |
| SOCKS5 kullanma | curl -x socks5h://host URL | yerel olarak değil |
| Paralel aktarımlar | curl -Z ... | desteklenmiyor |
Tabloyu Okuma
Bu simetri, günlük işlemler için de geçerlidir — çoğu görevin doğrudan bir karşılığı vardır; bayrak yazımlarındaki farklılıklar önemli olmaktan ziyade can sıkıcıdır.
“Mümkün değil” olarak işaretlenmiş dört satır, asıl seçimin yapıldığı yerlerdir. Bir siteyi yansıtma işlemi yalnızca wget ile yapılabilir. Yükleme işlemi yalnızca curl ile yapılabilir. SOCKS proxy kullanımı yalnızca curl ile yapılabilir. Paralel aktarımlar yalnızca curl ile yapılabilir.
Göreviniz bu satırlardan birindeyse, karşılaştırma sona ermiştir ve okumayı bırakabilirsiniz. Değilse, her iki araç da işe yarar ve hangisini daha akıcı kullanıyorsanız onu kullanmalısınız.
Bayrak Çakışması Hakkında Bir Not
-O, iki araçta farklı anlamlara gelir ve bu gerçek bir tuzaktır.
curl'da -O, "URL'deki dosya adını kullanarak kaydet" anlamına gelirken, -o name "bu adla kaydet" anlamına gelir. wget'te ise -O name "bu adla kaydet" anlamına gelir ve diğerine gerek yoktur.
Dolayısıyla curl -O ile wget -O eşdeğer değildir ve iki araç arasında dikkatsizce çevrilen bir komut, beklenmedik sonuçlara yol açacaktır.
Göreve Göre Hangisini Kullanmalı
Kesin bir karar değil, bir karar listesi.
Ne zaman wget kullanmalısınız?
Bir dosyayı diske kaydetmek istediğinizde. Ek seçenek yok, ilerleme çubuğu yok, mantıklı varsayılan ayarlar. Bu, çoğu kişi için en yaygın durumdur.
Yansıtma yapmak veya özyinelemeli indirme yapmak istediğinizde. Tek seçenek budur. Uygun sınırlar ile wget -m veya wget -r.
Bağlantı güvenilir değilse ve dosya büyükse. Otomatik yeniden denemeler ve -c devam ettirme.
Yerel bir kopyayı senkronize tutuyorsanız. -N zaman damgası, yalnızca değişenleri indirir.
Başka birinin okuyacağı bir komut dosyasında basit bir indirme işlemi için mümkün olan en kısa komutu istiyorsanız.
Ne zaman curl kullanmalısınız?
Bir API ile çalışıyorsanız. Başlıklar, yöntemler, istek gövdeleri ve bir JSON işlemcisine aktarılan çıktı.
Sadece veri almakla kalmayıp, veri göndermeniz gerekiyorsa.
Hata ayıklama yapıyorsanız. -v ve -w adresleri, gönderilen isteği, yanıtı ve aşamalara göre ayrıştırılmış zamanlamayı gösterir. Bu, curl'ün günlük kullanımdaki en büyük avantajıdır ve rakipsizdir.
HTTP ve FTP'nin ötesinde bir protokole ihtiyacınız varsa.
SOCKS veya HTTPS proxy desteğine ihtiyacınız var.
Windows veya macOS kullanıyorsunuz ve sisteminizde hiçbir şey yüklü değil; bu platformlarda curl mevcutken wget genellikle yoktur.
Kod haline gelecek bir şey yazıyorsunuz; çünkü libcurl bağlamaları sayesinde komutun yapısı doğal bir şekilde aktarılır.
İkisini de Kullanın
Çoğu çalışma ortamı için en dürüst cevap budur. Her ikisi de küçüktür, ücretsizdir ve farklı konularda iyidir. İkisini de yüklemek ve duruma uygun olanı seçmek kararsızlık değildir — bu, onların gerçekten farklı araçlar olmasının doğru sonucudur.
Her İkisinde de Proxy Kullanımı
Bu alanda, bilinmesi gereken tek bir önemli fark vardır.
curl
# HTTP proxy
curl -x http://proxy.example.com:8080 https://example.com
# With credentials
curl -x http://user:pass@proxy.example.com:8080 https://example.com
# SOCKS5, with the proxy resolving hostnames
curl -x socks5h://proxy.example.com:1080 https://example.com
curl, HTTP proxy’lerini, HTTPS proxy’lerini ve SOCKS4/SOCKS5
’leri destekler; bunların tümü, şema içeren aynı -x
seçeneği aracılığıyla kullanılır.
wget
# Via environment variables
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
wget https://example.com
# With credentials
wget --proxy-user=user --proxy-password=pass https://example.com
wget, standart proxy ortam değişkenlerini okur ve proxy kimlik bilgileri için seçeneklere sahiptir.
Önemli Fark
wget'in yerel SOCKS desteği yoktur. curl ile wget'in karşılaştırma listesinde, curl'ün desteklediği ancak wget'in desteklemediği özellikler arasında SOCKS4 ve SOCKS5
yer almaktadır.
Proxy'niz yalnızca SOCKS destekliyorsa, wget bunu doğrudan kullanamaz. Genel olarak kullanılan geçici çözümler, wget'i proxychains gibi bir araç üzerinden çalıştırmak ya da önüne yerel bir HTTP-SOCKS köprüsü yerleştirmektir — her ikisi de işe yarar, ancak her ikisi de sessizce arıza verebilecek bir bileşen ekler.
İkisi arasında seçim yapıyorsanız ve kurulumunuzda SOCKS varsa, karar bu şekilde verilir.
DNS Detayı, Tekrar
curl, SOCKS ile kullanıldığında her zaman geçerli olduğu için tekrarlamakta fayda var. socks5://
, makinenizdeki ana bilgisayar adlarını çözümler; socks5h://
ise ana bilgisayar adını proxy'ye gönderir. İlki, trafik doğru şekilde yönlendirilse bile ziyaret ettiğiniz her ana bilgisayarı yerel çözümleyicinize sızdırır ve konuma bağlı altyapıya sahip siteler için bölgesel olarak yanlış bir adres verebilir.
Aksi için özel bir nedeniniz yoksa socks5h://
kullanın.
Ve Satışı Kendimiz Engellediğimiz Kısım
Bir dosya indiriyorsanız, kimlik bilgilerinize sahip olduğunuz bir API'yi çağırıyorsanız veya bir hizmetin çalışıp çalışmadığını kontrol ediyorsanız, proxy'ye hiç ihtiyacınız yoktur. Proxy'ler, coğrafi kontrol ve adres başına hız sınırlamalarıyla sınırlı hacimli işler için bu araçlarda yerlerini hak ederler. Diğer her şey için ise gecikme, bir arıza noktası ve bir fatura eklerler.
Hiçbiri Doğru Araç Değilse
Bazı yaygın durumlarda başka bir şeye ihtiyaç duyulur ve bu araçlardan herhangi birini kullanmak bir öğleden sonranızı boşa harcamak anlamına gelir.
Sayfa JavaScript ile oluşturuluyor. Her iki araç da sunucunun gönderdiği verileri alır. İçerik daha sonra tarayıcıda birleştiriliyorsa, elinizde boş bir kabuk kalır ve hiçbir flag bunu düzeltemez. Headless bir tarayıcıya ihtiyacınız vardır — Playwright, Puppeteer veya benzeri.
Sayfa ile etkileşime girmeniz gerekiyor. Tıklama, kaydırma, form doldurma, bir şeyin görünmesini bekleme. Cevap aynı.
Kodda bakımı kolay bir şey geliştiriyorsunuz. Bir uygulamadan curl'a komut göndermek, zamanla işe yaramaz hale gelen yaygın bir kısayoldur. Dilinizin HTTP kütüphanesini veya libcurl'un bağlamalarını kullanın ve hataları doğru şekilde işleyin.
Bir dizini her iki yönde de senkronize etmeniz gerekiyor. rsync bu iş için uygun araçtır ve yinelemeli wget'ten bu konuda çok daha iyidir.
Kontrolünüz altındaki sunucular arasında aktarım yapıyorsunuz. scp, rsync veya sftp — bu araçlar amaca özel olarak geliştirilmiştir, daha hızlıdır ve izinleri ile kısmi aktarımları doğru şekilde yönetir.
Aktarım halindeki trafiği incelemek veya değiştirmek istiyorsunuz. Bir trafik yakalama proxy aracı doğru seçimdir.
Bir video platformundan medya indiriyorsunuz. Özel olarak tasarlanmış araçlar, bu iki seçeneğin de yapamadığı manifest ayrıştırma ve akış birleştirme işlemlerini halleder.
Veriler başka bir yolla sunuluyor. Bir API, toplu indirme, halka açık veri kümesi, bir RSS beslemesi. Kontrol işlemi on dakika sürer ve genellikle proje başlamadan sona erer.
Yinelemeli İndirme Konusunda Dikkat Edilmesi Gerekenler
wget -r hakkında özel bir uyarı: Bu araç güçlüdür ve istemediğiniz bir şeye yönlendirilmesi kolaydır.
-np olmadan, üst dizinlere tırmanabilir. --level olmadan ise çok aşağıya inebilir. --wait olmadan, sunucu yanıt verdiği hızda istek gönderir; bu, başkasının altyapısına karşı kaba bir davranıştır ve engellenmenize yol açabilir.
En azından şunu yapın: wget -r -np --level=3 --wait=1 URL. Ayrıca önce robots.txt adresini ve sitenin kullanım koşullarını kontrol edin — wget varsayılan olarak robots.txt kuralına uyar ve bunu devre dışı bırakmak bir kolaylık değil, bilinçli bir karardır.
İnsanlar Ayrıca Şunları Soruyor
curl ile wget arasındaki fark nedir?
curl, cat gibi çalışır — veriyi alır ve standart çıktıya yazar. wget ise cp gibi çalışır — veriyi alır ve bir dosyaya kaydeder. curl çok daha fazla protokolü, yüklemeyi, SOCKS proxy'lerini ve paralel aktarımları destekler; wget ise özyinelemeli indirme ve sitelerin aynalanmasını yapabilir, ki bu curl'un hiç yapamadığı şeylerdir.
curl, wget'ten daha mı iyidir?
İkisi de birbirinden daha iyi değildir. curl, arkasında bir kütüphane bulunan ve çok daha geniş bir protokol yelpazesine sahip bir aktarım aracıdır; wget ise indirme için daha iyi varsayılan ayarlara ve benzersiz bir özyinelemeli indirme özelliğine sahip bir indirme programıdır. Çoğu kişi, her ikisine de sahip olmaktan fayda sağlar.
curl, wget gibi özyinelemeli indirme yapabilir mi?
Hayır. curl, kendisine verdiğiniz URL’leri alır; HTML’yi ayrıştırmaz veya bağlantıları keşfetmez. Özyinelemeli indirme ve site aynalama yalnızca wget’e özgüdür ve curl’ün kendi bakımcısı bunu wget’in en büyük gücü olarak adlandırır.
curl neden yönlendirmeleri takip etmez?
Tasarım gereği. curl, sizin istemediğiniz isteklerde bulunmak yerine sunucunun ne söylediğini bildirir. Yönlendirmeleri takip etmek iç-L'i ekleyin. wget'in amacı dosyayı almak olduğu ve dosya taşındığı için varsayılan olarak yönlendirmeleri takip eder.
Hangisi daha hızlı, curl mu yoksa wget mi?
Tek bir aktarım için aradaki fark önemsizdir — her ikisi de ağın sınırlamalarına tabidir. curl, -Z ile birden fazla aktarımı paralel olarak çalıştırabilir; bu da çok sayıda küçük kaynağı alırken onu önemli ölçüde daha hızlı hale getirir.
wget, SOCKS proxy'lerini destekler mi?
Doğal olarak desteklemez. curl, SOCKS4, SOCKS5 ve HTTPS proxy'lerini destekler; wget ise standart HTTP proxy ortam değişkenlerini kullanır. wget ile SOCKS kullanmak için proxychains gibi bir sarmalayıcıya veya yerel bir köprüye ihtiyacınız vardır.
Bir komut dosyasında hangisini kullanmalıyım?
Her ikisini de, ancak açıkça belirtilen seçeneklerle. API'ler ve yanıtı incelediğiniz her durumda, curl -sSfL --max-time 30. Dosya alırken, wget --tries=3 --timeout=30. Otomasyonda her iki aracın varsayılan ayarlarına güvenmeyin.
curl veya wget varsayılan olarak yüklü mü?
curl, macOS ile Windows 10 ve 11'de önceden yüklenmiş olarak gelir. wget, çoğu Linux dağıtımında standarttır ancak macOS ve Windows'ta sıklıkla bulunmaz. Platformlar arası komut dosyaları için curl'ü varsaymak daha güvenlidir.
Sonuç
Bu karşılaştırma, popülerliğinin düşündürdüğünden daha hızlı sonuçlanıyor; çünkü bu iki araç farklı fiiller temel alınarak geliştirilmiştir.
curl aktarım yapar. wget indirir. curl, cat gibi standart çıktıya yazar, tam olarak istenen işi yapar ve geri kalanını bildirir — bu yüzden yönlendirmeleri takip etmez, yeniden deneme yapmaz ve dosya yazmak için bir bayrağa ihtiyaç duyar. wget, cp gibi diske yazar ve varsayılan olarak yaptığı her şey, nihai hedefin sonunda var olan bir dosya olmasından kaynaklanır.
Dört özellik, seçimi kesin olarak belirler ve göreviniz bunlardan birini içeriyorsa, karşılaştırmanın geri kalanı önemsizdir. Yinelemeli indirme ve site yansıtma yalnızca wget ile mümkündür — curl'ün kendi bakımcısı bunu wget'in en büyük gücü olarak adlandırır ve curl'de buna eşdeğer bir özellik yoktur. Yüklemeler, SOCKS proxy'leri ve paralel aktarımlar yalnızca curl ile mümkündür.
Bunların dışında her ikisi de çalışır ve pratikteki farklar, komut satırı seçeneklerinin yazılışları ve varsayılan ayarlardır. Komutları birinden diğerine çevirirken -O çakışmasına dikkat edin, çünkü her ikisinde de zıt anlamlara gelir. Otomatikleştirilmiş işlemlerde ise, her iki aracın varsayımlarına güvenmek yerine niyetinizi açıkça belirtin — curl -sSfL --max-time 30 ve wget --tries=3 --timeout=30, gelecek yıl bunları okuyan herkes için hâlâ anlamlı olacak komutlardır.
Proxy'ler hakkında: Biz bunları satıyoruz, ancak bu araçların çoğu kullanımında proxy'ye gerek yoktur. Proxy'ye ihtiyacınız olduğunda, curl'un desteği daha geniştir ve araçtan daha önemli olan ayrıntı, socks5:// yerine socks5h:// kullanmaktır; böylece ana bilgisayar adı aramalarınız, trafiğinizle aynı yolu izler.
Dürüst bir tavsiye olarak, ikisini de yüklemenizi öneririz. Her ikisi de küçük boyutludur, ücretsizdir ve hangisinin daha iyi olduğu konusundaki tartışma, çalışan çoğu makinede her ikisinin de bulunması gerçeğiyle yıllar önce çözüme kavuşmuştur.