cURL yanıt gövdesini bastırır


112

CURL'ye yanıt gövdesinin çıktısını bastırması talimatını vermek mümkün müdür?

Benim durumumda, yanıt gövdesi, ilgili bilgileri bulmayı zorlaştıran CLI arabelleğini aşan bir HTML sayfasıdır. Çıktının HTTP yanıt kodu, başlıklar vb. Gibi diğer bölümlerini - gerçek HTML hariç her şeyi - incelemek istiyorum .

Yanıtlar:


118

Sen kullanabilirsiniz -oanahtarı ve nullsözde dosyayı:

Unix

curl -s -o /dev/null -v http://google.com

pencereler

curl -s -o nul -v http://google.com

1
... Unix üzerinde iseniz ;-) Windows için nul kullanmak isteyebilirsiniz. İşte dokümanların bağlantısı, belki BaltoStar bir dahaki sefere sormadan önce okuma dürtüsünü hissediyor ;-) curl.haxx.se/docs/manpage.html
Marged

3
Rica ederim. Ama bu "nul", "null" bu ada sahip bir dosya oluşturacak
Marged

1
Aslında göndermeden önce man sayfasını okudum ve denedim -s -o nulama Windows makinemde curl -s -o nul -v http://{internal-host}/{internal-uri}sayfamın tüm html'sini çıktı - denedim curl -s -o nul -v http://google.comve çıktıyı beklendiği gibi bastırıyor, bu yüzden bunun neden dahili sitem için çalışmadığını anlamıyorum
BaltoStar

-oyalnızca bir URL çıktısını belirtir: birden fazla url'niz varsa, yalnızca ilkini atar :(
Simon Buchan

1
Taşınabilir olmayan NULve /dev/null. -sIXGETIMO kullanmak daha iyi bir seçenektir.
binki

46

İşte tüm curl çıktılarını ve üstbilgileri, oluşsa bile hataları gösterme seçeneğiyle bastırmanın bir yolu. Cron işleri veya otomatik testler için kullanışlıdır.

Unix

Tüm çıktıyı bastırmak için:

curl --silent --output /dev/null http://example.com

Çıktıyı bastırmak, ancak yine de meydana gelirse hataları göstermek için:

curl --silent --output /dev/null --show-error --fail http://example.com

pencereler

Tüm çıktıyı bastırmak için:

curl --silent --output nul http://example.com

Çıktıyı bastırmak, ancak yine de meydana gelirse hataları göstermek için:

curl --silent --output nul --show-error --fail http://example.com

Açıklanan Parametreler

--silentDevam eden indirme istatistiklerini bastırır (ancak yine de HTML çıktısını gösterecektir)
--output /dev/nullbaşarılı çıktıları gizler
--show-error, silentmod etkinleştirildiğinde
--failbile HTTP yanıtı yalnızca DNS yerine bir hata koduysa (404, 500 vb.) bir hata oluşturur / TCP hataları.


GÜNCELLEME: Orijinal yazarın her şeyi susturmak yerine bir isteğin başlıklarını ve yanıt kodunu incelemek istediğini fark ettim . Bunun nasıl yapılacağına dair ayrıntılar için samael'in cevabına bakın .


2
Taşınabilir olmayan NULve /dev/null. -sIXGETIMO kullanmak daha iyi bir seçenektir.
binki

1
@Binki yorumunuz için teşekkürler - aslında farklı şeyler yapıyorlar. Ayrıca OP'nin benim çözümümde gösterilmeyen başlıkları incelemek istediğini anladım. Cevabımı bunu yansıtacak şekilde güncelledim.
Simon East

1
Sanırım OP'nin gönderisini tekrar okurken sadece başlıkları görmek istediklerini söylemediler . Aslında curl -vo/dev/null/ curl -voNUL… arıyor olabilirler ve bunun taşınabilir bir çeşidi var mı bilmiyorum, hrm… ;-).
binki

--Fail için kısa bir komut var mı? Sanırım -sS hem --Sessiz hem de --show-error için ihtiyacımız olan şey
Freedo

Evet, var: curl -Ssfo /dev/null url. Ancak gelecekteki geliştiricilere iyi davranın.
Amit Naidu

29

Başlıkları göstermek, ancak yanıt gövdesini gizlemek istediğinizde şunları kullanmak isteyeceksiniz:

curl -sIXGET http://somedomain.com/your/url

curl -I http://somedomain.com/your/urlSadece yanıt başlıklarını göstermek için kullanıyordum . Bununla ilgili sorun , yalnızca bir isteğe yanıt veren bir API çağrısını test etmek istediğinizde iyi olmayan HEADyöntemi kullanarak GETisteği yapmasıdır. Bunun -X GETiçin, isteği bir GET.

Yani özetle:

-sderi ilerleme çıkışından bar (başka bir programa boru zaman özellikle faydalı)
-Igösterir başlıkları (ancak bir hale HEADistek)
-XGETdönüştürür bir geri talep GETtalep

bkz: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/


2
Bu gerçekten karmaşık; curl -itam olarak aynı şeyi yapar.
bfontaine

4
hayır, -içıktıdaki HTTP başlığını ve gövdeyi içerir. Dene. curl -i http://google.comile aynı değilcurl -IXGET http://google.com
samael

Benim amaçlarım için (ve OP'ler) curl -I urlyeterlidir ve aynı etkiye sahiptir. Sadece url'nin duyarlı olup olmadığını kontrol etmem gerekiyordu. Bu soru da sadece bedeni bastırmakla ilgiliydi ki HEADbu iyi iş çıkarır.
Amit Naidu

0

Sadece HEAD isteğinde bulunun. Başlıkları gövde olmadan alacaksınız. Standartlara uyumlu bir sunucunun, burada bir GET isteğine göndereceği gibi tam olarak aynı bilgileri göndermesi beklenir.

curl --head <url>

Bir HEAD isteği sizin için herhangi bir nedenle işe yaramazsa, bu, cURL'nin yanıt kodunu ve başlıklarını almasını ve yazdırmasını sağlar ve ardından yanıt gövdesini bile almadan bağlantıyı keser - onu alan ve sonra atan diğer yanıtların aksine. Bu, özellikle gövde çok büyükse, çok fazla zaman ve bant genişliği tasarrufu sağlayabilir.

curl --head -X GET <url>
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.