Bir dosyayı wget
ve curl
ile indirmeye çalışıyorum ve 403 hatası (yasak) ile reddediliyor.
Dosyayı aynı makinedeki web tarayıcısını kullanarak görüntüleyebiliyorum.
Tarayıcımın http://www.whatsmyuseragent.com tarafından elde edilen kullanıcı aracısı ile tekrar deniyorum. Bunu yapıyorum:
wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
ve
curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
ama hala yasak. 403'ün başka ne gibi nedenleri olabilir ve bunları aşmak için wget
ve curl
komutlarını ne şekilde değiştirebilirim?
(bu dosyayı alabilmekle ilgili değil - tarayıcımdan kaydedebileceğimi biliyorum; komut satırı araçlarının neden farklı çalıştığını anlamakla ilgili)
güncelleme
Bu soruya verilen tüm mükemmel cevaplar için teşekkürler. Karşılaştığım özel sorun, sunucunun yönlendiriciyi kontrol etmesiydi. Bunu komut satırına ekleyerek curl
ve wget
kullanarak dosyayı alabildim.
Yönlendiriciyi kontrol eden sunucu, hiçbir kontrol yapmayan başka bir konuma bir 302 ile sıçradı, bu nedenle bu sitenin bir curl
veya wget
i temiz bir şekilde çalıştı.
Eğer ilgilenen varsa, bu durum gömülü CSS hakkında bilgi edinmek için this sayfasını okurken ve örnek olarak sitenin css'sine bakmaya çalışırken ortaya çıktı. Sorun yaşadığım asıl URL this idi ve sonuçta elde ettiğim curl
şu şekildeydi
curl -L -H 'Referer: http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
ve wget ise
wget --referer='http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
Çok ilginç.
Bir HTTP isteği curl veya wget tarafından ayarlanmayan daha fazla başlık içerebilir. Örneğin:
key=val
verildiğinde, bunu curl
için -b key=val
(veya --cookie key=val
) seçeneği ile ayarlayabilirsiniz.curl
seçeneği -e URL
ve --referer URL
şeklindedir.curl
içinde -u user:password
(veya --user user:password
) seçeneği ile ayarlanabilir.Mozilla
ile başlamayan veya Wget
veya curl
içeren kullanıcı aracılarını reddeder) kullanılabilir.Tarayıcınız tarafından gönderilen başlıkları okumak için normalde tarayıcınızın Geliştirici araçlarını kullanabilirsiniz (Firefox ve Chrome bunu destekler). Bağlantı şifrelenmemişse (yani HTTPS kullanılmıyorsa), bu amaçla Wireshark gibi bir paket dinleyicisi de kullanabilirsiniz.
Bu başlıkların yanı sıra, web siteleri perde arkasında durumu değiştiren bazı eylemleri de tetikleyebilir. Örneğin, bir sayfa açılırken, indirme bağlantısını hazırlamak için arka planda bir istek gerçekleştirilmesi mümkündür. Ya da sayfada bir yönlendirme gerçekleşir. Bu eylemler genellikle Javascript kullanır, ancak bu eylemleri kolaylaştırmak için gizli bir çerçeve de olabilir.
Bir indirme sitesinden dosyaları kolayca almak için bir yöntem arıyorsanız, plowshare ile birlikte gelen plowdown'a bir göz atın.
Yukarıdaki yanıtlara Chrome geliştirici araçlarında (v26.0'dan beri) ve Firebug'da (v1.12'den beri) bulunan "Copy as cURL" özelliğini kullanabileceğinizi eklemek istiyorum. Bu özelliğe Ağ sekmesindeki istek satırına sağ tıklayarak erişebilirsiniz.
Ne istediğinize bağlı olarak, bu bir çerez olabilir. Firefox ile, söz konusu sayfadayken sağ tıklayıp "Sayfa Bilgilerini Görüntüle" yapabilirsiniz. Güvenlik" simgesini seçin ve ardından "Çerezleri Görüntüle" düğmesine tıklayın.
Çerezleri çözmek için Firefox "Live HTTP Headers" eklentisi çok önemlidir. Hangi çerezlerin ayarlandığını ve web sunucusuna hangi çerezlerin geri gönderildiğini görebilirsiniz.
'wget' çerezlerle çalışabilir, ancak çerez göndermediğine dair bir ipucu vermediği için tamamen sinir bozucudur. Yapabileceğiniz en iyi şey, ilgili tüm çerezleri tarayıcınızdan kaldırmak ve ilk oturum açma veya sayfa görüntüleme sırası ne olursa olsun devam etmektir. Çerezler ve POST ya da GET parametreleri için "Live HTTP Headers" bölümüne bakın. İlk giriş adımını "--keep-session-cookies" ve "--save-cookies" seçeneklerini kullanarak wget
ile yapın. Bu size bir metin editörü ile bakabileceğiniz bir çerez dosyası verecektir. Sonraki adımlar için çerez dosyasıyla birlikte wget --load-cookies
kullanın.