wget --spider 404 ile başarısız oluyor ancak --spider olmadan çalışıyor


0

Liman işçisi konteynerinde sağlık kontrolü yapmaya çalışıyorum. Bu komutu buldum:

wget --quiet --tries=1 --spider http://localhost:6077 || exit 1

Sorun şu ki, konteyner çalışırken, - spider olmadan wget çalıştırıyorsam bir HTTP 200 kodu alıyorum, ancak - spider kullanıyorsanız 404 döndürüyor.

Bu neden olabilir?

$ wget --tries=1  http://localhost:6077
--2019-04-22 04:20:12--  http://localhost:6077/
Resolving localhost (localhost)... 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:6077... connected.
HTTP request sent, awaiting response... 200 OK
Length: 436 [application/xml]
Saving to: ‘index.html.1’


$ wget --tries=1 --spider  http://localhost:6077
Spider mode enabled. Check if remote file exists.
--2019-04-22 04:21:46--  http://localhost:6077/
Resolving localhost (localhost)... 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:6077... connected.
HTTP request sent, awaiting response... 404 Not Found
Remote file does not exist -- broken link!!!

Bu garip davranış, sağlık kontrolümü bozuyor, eğer kullanmazsam - spider, wget'in index.html dosyasını doğru bir yerden indirmeye çalışacağını farz ediyorum?

Yanıtlar:


0

Görünüşe göre wget çağrınız --spiderolması gerektiği gibi çalışmıyor. Ayrıca bir HEADistek kullanarak bir HTTP 200 döndürmelidir . Lanet olası cevabı gör .

Eğer kullanmazsam - spider wget'in index.html dosyasını doğru bir yere indirmeye çalışacağını varsayıyorum?

-OBelirli bir dosya adına ihtiyacınız varsa , set çıktı belgesini bu seçenekle ayarlayabilirsiniz.

wget --quiet --tries=1 -O/tmp/docker.html http://localhost:6077

Veya herhangi bir çıktı almak istemiyorsanız -O -, sonucu stdout'a yazdırmak ve sonra stdout / stderr öğesine yönlendirmek için kullanabilirsiniz /dev/null.

wget -O - http://localhost:6077 &>/dev/null

Yani tek seçeneğin wgetdosyayı indirmesine izin vermek olduğuna inanıyor musun? Bu ideal değil, benim durumumda dosya sadece 436 bayt iken, sadece sağlık kontrolü için ayda 30 MB indiriliyor ... çıktı daha büyükse yüzlerce mbs olabilir! ayrıca --delete-afterçıktıyı silmek için bulundu
Freedo

Hayır, kullanın -O -ve çıktı stdout'a yazdırılır. Hiçbir dosya yazılmamış. Bunu bile bastırmak için stdout ve stderr komutunu yönlendirebilirsiniz /dev/null. Veya bir çıktı dosyası kullanıyorsanız -O /tmp/foo, dosyanın üzerine yazılacaktır.
Freddy,

Beni anladığını sanmıyorum. Faydasız veri indirilmesini önlemek istiyorum. Yönlendirirsem /dev/nullveya her neyse, hala tüm dosyayı yüklüyorum! Gerçekten sadece almak istiyorum HTTPgerçekten mümkün değil uygun olup olmadığını durumunu (200,404, vs) ... ama
Freedo

Hayır, seni anlamıyorum. Dosyanız yalnızca 436 bayt ise , sorunun ne olduğunu göremiyorum.
Freddy,

1

Kabul edilen cevap yanlış gibi görünüyor ve aslında liman kasenizdeki bir hatayı gizlemenize yardımcı oluyor. --spiderSeçeneği Wget'a eklemek, Wget’ın a HEADyerine bir istek göndermesine neden olur GET. Özellikle bu özel durumda, içinde değil ile Wget'i çağırma --recursive.

RFC 7231, bölüm 4.3.2'ye göre, bir HEADtalep, GETmesaj gövdesini içermemesi dışında bir taleple aynıdır. Ancak, sizin durumunuzda, sunucu bir HEADve bir GETistek için farklı bir yanıt döndürüyor gibi görünüyor . Bunu sunucunuzda bir hata olarak adlandırırdım. Lütfen Wget'i örümcek kullanmadan çağırmayın ve konuyu halının altına sokmayın. Bu davranış, HTTP spesifikasyonuna aykırıdır ve gelecekteki diğer sorunlara yol açacak ve buna bağlı müşteriler yanlış bir cevap görecektir.


Hiçbir fikrim yoktu, ama sağlık kontrolüne cevap veren sunucuyu da kontrol etmiyorum, sadece yazılımı liman işçisi içine yerleştiren kişi benim.
Freedo

Teşekkürler, ilk cümlemi güncelledim.
Freddy,
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.