Kıvrılma ve kalmama neden 403 yasakla sonuçlanır?


57

Ben bir dosyayı indirmeyi deneyin wgetve curlve (yasak) bir 403 hata ile reddedilir.

Dosyayı aynı makinedeki web tarayıcısını kullanarak görüntüleyebilirim.

Http://www.whatsmyuseragent.com tarafından edinilen tarayıcımın kullanıcı aracısı ile tekrar denerim . 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 yine de yasaktır. 403 için başka hangi sebepler olabilir wgetve curlüstesinden gelmek için hangi yolları ve komutları değiştirebilirim ?

(bu dosyayı elde edememekle ilgili değil - sadece tarayıcıdan 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önlendireni kontrol etmesiydi. Bunu komut satırına ekleyerek dosyayı curlve kullanarak elde edebilirim wget.

Yönlendiriciyi kontrol eden sunucu 302 boyunca hiç denetleme yapmayan başka bir yere sıçradı, bu nedenle bu site curlveya bir wgetsite temiz bir şekilde çalıştı.

Herhangi biri ilgileniyorsa, bu gömülü CSS hakkında bilgi edinmek için bu sayfayı okuyordum ve bir örnek için sitenin css'ine bakmaya çalıştığım için geldi. Benim sıkıntı başlamıştı Gerçek URL oldu bu ve curlolduğu ile ben sona erdi

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 asıl

 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ç.


7
Yönlendireni kontrol eden sayfalar gerçekten sinir bozucu. Üstbilginin isteğe bağlı olması ve istatistik toplamak için kullanılması gerekiyor.
zaadeh

Bulduğum en kolay şey bir zip dosyasına dönüştürmek ve bu şekilde kullanmaktır.
piniyini

Yanıtlar:


40

Bir HTTP isteği, curl veya wget tarafından ayarlanmayan daha fazla başlık içerebilir. Örneğin:

  • Çerez: Bir isteğin reddedilmesinin en olası nedeni budur, bunun indirme sitelerinde olduğunu gördüm. Bir çerez verildiğinde key=val, onu -b key=val(veya --cookie key=val) seçeneğiyle ayarlayabilirsiniz curl.
  • Hakem (ler): bir web sayfasındaki linke tıkladığınızda, çoğu tarayıcı geçerli sayfayı referans olarak gönderme eğilimindedir. Güvenilmemelidir, ancak eBay bu başlık olmadığında bir şifreyi sıfırlayamadı. Yani evet, olabilir. Bunun için curlseçenek -e URLve --referer URL.
  • Yetkilendirme: Bu, kullanıcı adı / şifre iletişim kutusunun kontrol edilemeyen UI'sı nedeniyle daha az popüler hale geliyor, ancak yine de mümkün. Bu ayarlanabilir curlile -u user:password(veya --user user:password) seçeneği.
  • Kullanıcı Aracısı: bazı istekler, Kullanıcı Aracısına bağlı olarak farklı yanıtlar verir. Bu, iyi bir şekilde (bir aynalar listesi yerine gerçek indirmeyi sağlar) veya kötü bir şekilde (başlangıç Mozillaveya içermediği Wgetveya içermeyen kullanıcı aracısını reddederek curl) kullanılabilir.

Tarayıcınız tarafından gönderilen başlıkları okumak için normal olarak tarayıcınızın Geliştirici araçlarını (Firefox ve Chrome bunu destekler) kullanabilirsiniz. Bağlantı şifrelenmemişse (HTTPS kullanmıyorsa), bu amaçla Wireshark gibi bir paket dinleyiciyi de kullanabilirsiniz.

Bu başlıkların yanı sıra, web siteleri de durumu değiştiren sahnelerin arkasında bazı eylemleri tetikleyebilir. Örneğin, bir sayfayı açarken, indirme linkini hazırlamak için arka planda bir istek yapılması mümkündür. Veya sayfada bir yönlendirme olur. Bu eylemler genellikle Javascript'i 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, pulluk bırakma ile birlikte verilen pulluklara bakın .


Gerçekten sapkın bir olasılık da, sunucunun bir nedenden dolayı başarı yerine 200 yerine 403 dönecek şekilde yapılandırılmış olmasıdır.
kasperd

1
Bu bana ihtiyacım olan ipucunu verdi. Çerezleri denedikten sonra, yönlendirenin problem olduğunu tespit ettim (şimdi, eğer doğru
yazılsa bile

2
O ise hala başarısız içinde wgetdenemede ekleyerek --auth-no-challenge. Sihir gibi çalışır.
Jonathan

13

Sadece (v26.0 beri) Chrome geliştirici araçları "Kopyala cURL olarak" özelliği mevcut ve (beri Firebug'u kullanabilirsiniz Yukarıdaki cevaplar eklemek istediğiniz v1.12 ). Ağ sekmesindeki istek satırına sağ tıklayarak bu özelliğe erişebilirsiniz.


Bu, özellikle Chrome'daki araçlara büyük ölçüde yardımcı oldu. Firefox'ta denediğimde, 302'den sonraki istek başlığı görebildiğim kadarıydı. Chromium'da her ikisini de görebildim ve bu bana sorunu çözme bilgisi verdi.
starfry

1
@starfry Yeniden Enable persistent logsyönlendirmedeki ağ günlüklerini temizlemesini önlemek için Firefox'un geliştirme araçlarının ayarlar sekmesini tıklamanız gerekir . Chrome'da benzer bir seçenek var. Bu arada, "cURL olarak kopyala", bir süredir Firefox Nightly / Aurora / Beta’da bulunuyor ve bir sonraki ana sürümden (31.0) kaynaklanıyor.
Bob

9

Yukarıdakilerin hepsini denedim, ancak şans yok; Kullanıcı aracı dizesini almak için dev tarayıcı aracını kullandım, aşağıdakileri ekledim, başarı:

--user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"

5

Ne istediğine bağlı olarak, bir kurabiye olabilir. Firefox ile, söz konusu sayfada, "Sayfa Bilgilerini Göster" sayfasındayken sağ tıklayabilirsiniz. "Güvenlik" simgesini seçin ve "Çerezleri Göster" düğmesini tıklayın.

Çerezleri şaşırtmak için, Firefox "Live HTTP Başlıkları" eklentisi gereklidir. Hangi çerezlerin ayarlandığını ve hangi çerezlerin web sunucusuna geri gönderildiğini görebilirsiniz.

wgetçerezlerle çalışabilir, ancak çerezleri göndermemesi konusunda ipucu vermediği için tamamen çıldırtıcıdır. En iyi seçeneğiniz, ilgili tüm çerezleri tarayıcınızdan kaldırmak ve ilk giriş veya sayfa görüntüleme sırasından geçmeden geçmesidir. Çerezler ve POST veya GET parametreleri için "Canlı HTTP Başlıkları" na bakın. İlk oturum açma adımını wget"--keep-session-cookies" ve "--save-cookies" seçeneklerini kullanarak yapın. Bu size bir metin editörüyle bakabileceğiniz bir çerez dosyası verecektir. wget --load-cookiesSonraki adımlar için çerez dosyasıyla birlikte kullanın .


1
Firefox'ta çerezler olmadan özel bir tarama penceresi açarak test ettim ve beklendiği gibi 403 hatasını aldım. Yeni bir sekmede hatayla karşılaşmamanız ilginç. Chromium'da yeni bir sekme
403'ü

1
Bu arada, gönderilen ve alınan çerezleri herhangi bir ekleme yapmadan incelemek için Firefox'un geliştirme araçlarının ağ sekmesini kullanabilirsiniz. Chrome / Chromium için aynı şeyler.
Bob

@bob - evet bunu buldum. Bir şey olmadığı için birkaç dakika sürdü. Firebug şimdi CURL olarak Kopyaladı, ancak yerel araçları da görmek güzel olurdu.
starfry

1

Bunun olmasının bir başka nedeni de site SSL gerektiriyorsa. Tarayıcınız otomatik olarak HTTP’den HTTPS’ye iletecektir ancak kıvrılma ve wget olmayacaktır. Bu yüzden isteği HTTP yerine HTTPS ile deneyin.


3
Eğer haklıysam, bu 301 veya 302 hatasıyla bitecektir.
Jakuje
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.