Komut satırı kıvrımlı istek üstbilgileri nasıl görüntülenir


567

Komut satırı kıvrımı -Dseçeneği kullanarak yanıt üstbilgisini görüntüleyebilir , ancak hangi istek üstbilgisini gönderdiğini görmek istiyorum. Bunu nasıl yapabilirim?


28
curl --head http://google.com-Ibayrakla aynı şeyi yapacak :)
Abel Terefe

9
--head/ -I: Kullanmayla ilgili tüm sunucular HEADisteklere tam olarak aynı yanıt vermiyor (örneğin, Content-Encodinggövdenin sıkıştırıldığını doğrulamaya çalışsaydınız eksik olurdu) ve tüm sunucular desteklemiyor HEAD. -vgenellikle daha güvenli bir seçimdir.
cfeduke

Yanıtlar:


751

curl -vveya --verboseoption diğer şeylerin yanı sıra HTTP istek başlıklarını da gösterir. İşte bazı örnek çıktı:

$ curl -v http://google.com/
* About to connect() to google.com port 80 (#0)
*   Trying 66.102.7.104... connected
* Connected to google.com (66.102.7.104) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.16.4 (i386-apple-darwin9.0) libcurl/7.16.4 OpenSSL/0.9.7l zlib/1.2.3
> Host: google.com
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Date: Thu, 15 Jul 2010 06:06:52 GMT
< Expires: Sat, 14 Aug 2010 06:06:52 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 1; mode=block
< 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
* Connection #0 to host google.com left intact
* Closing connection #0

6
Paketi oluşturmak istiyor ancak göndermek istemiyorsam ne yapmalıyım?
PuercoPop

@jacobsimeon Bunun sadece İstek başlıklarını değil, Yanıt başlıklarını ve Yanıt gövdesini de gösterdiğini düşünüyorum .
Pmpr

234

Yanıt başlıklarını görüntülemek için popüler bir yanıt , ancak OP istek başlıklarını sordu .

curl -s -D - -o /dev/null http://example.com
  • -s : İlerleme çubuğu göstermekten kaçının
  • -D -: Başlıkları bir dosyaya -dök , ancak stdout'a gönderir
  • -o /dev/null : Yanıt gövdesini yoksay

Bu, farklı sonuçlar üretebilecek -Ibir HEADistek göndermediğinden daha iyidir .

Daha iyi, -vçünkü onu çözmek için çok fazla hack'e ihtiyacınız yok.


17
Soruyu okuyun - bu, yanıt üstbilgilerinin üstbilgi
Graeme Stuart

57
Bu cevap benim için yararlı çünkü soruyu da yanlış okudum.
Liam

2
Bu komut Windows için biraz farklı: curl -sD - -o NULL http://example.com
Sergey Vlasov

2
@SergeyVlasov Aslında, /dev/nullWindows'taki eşdeğeri nuldeğil null.
Francisco Zarabozo

2
Bu soru istek başlıklarını sorsa da, google yanıt başlıklarını arayan herkesi yönlendiriyor, bu nedenle bu yanıtın burada olduğuna sevindik. Ve bu cevap yanıt başlıklarını almak için en iyisidir. Teşekkürler!!!
biomiker

96

Kıvrılmak için aradığınız komut satırı anahtarının olduğuna inanıyorum -I.

Örnek kullanım:

$ curl -I http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287  
HTTP/1.1 301 Moved Permanently
Date: Sat, 29 Dec 2012 15:22:05 GMT
Server: Apache
Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/
Content-Type: text/html; charset=iso-8859-1

Ayrıca, 301 yanıt HTTP durum kodu ile karşılaşırsanız, URL yönlendirmelerini izlemeyi -Lsöylemek curliçin bağımsız değişken anahtarını iletmek ve bu durumda, aşağıda gösterilen tüm sayfaların (URL yönlendirmeleri dahil) başlıklarını yazdırmak isteyebilirsiniz. :

$ curl -I -L http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287
HTTP/1.1 301 Moved Permanently
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 302 Found
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Set-Cookie: UID=b8c37e33defde51cf91e1e03e51657da
Location: noaccess.php
Content-Type: text/html

HTTP/1.1 200 OK
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Content-Type: text/html

38
Bu -Iseçenek yanıt başlıklarını gösterir . Soru istek başlıklarıyla ilgiliydi .
Asaph

53
-ISeçenekleri nedenleri bir yapmak kıvrılıp HTTP HEADsunucudan yanıtını değiştirebilir, hangi. -vAnahtar kullanmak daha iyi olduğuna inanıyorum.
acw

1
Bunu bir HEADistek dışında bir şeyle (örneğin -X POST) denerseniz ve "Yalnızca bir HTTP isteği seçebilirsiniz!" daha stackoverflow.com/questions/286982/... sana yardım edecek. Mesele şu ki -I, belirtildiği HEADgibi bir istek yapar acwve curlçağrınız başka bir çağrı yapmak için ayarlandığında çağrıda iki HTTP isteğiniz olur curl...
grip

7
Bu çok yanlış bir cevap. (Söz veriyorum, genellikle burada çok nazikim.) 1. Bu OP'nin istediklerinin tam tersini yapıyor. 2. veya HEADyerine bir istek yöntemi kullanır . 3. Sunucunuzun a yerine farklı bir şekilde nasıl tepki verdiğini görmeye çalışmadığınız sürece ASLA "sadece başlıkları görmek" için kullanılmamalıdır . Çoğu zaman aynı olacak, ama her zaman değil. Yalnızca başlıkları görmek için kullanın . Bu beklenen sonuçları zamanın% 100'ünü verecektir. GETPOSTHEADGETcurl -o /dev/null -D /dev/stdout
Bruno Bronosky

79

Ayrıntılı seçenek kullanışlıdır, ancak curl'un yaptığı her şeyi (yalnızca üstbilgileri değil, iletilen HTTP gövdesi dahil) görmek istiyorsanız , aşağıdaki seçeneklerden birini kullanmanızı öneririz:

  • --trace-ascii - # stdout
  • --trace-ascii output_file.txt # dosya

Ben de cevap başlıkları ve vücut çok gösterir gibi sanmıyorum!
Pmpr

56

Aşağıdaki komutla güzel bir başlık çıktısı alırsınız:

 curl -L -v -s -o /dev/null google.de
  • -L, --location yönlendirmeleri takip et
  • -v, --verbose daha fazla çıktı, yönü gösterir
  • -s, --silent ilerleme çubuğu gösterme
  • -o, --output /dev/null alınan vücudu gösterme

Veya daha kısa versiyon:

 curl -Lvso /dev/null google.de

Sonuçlar:

* Rebuilt URL to: google.de/
*   Trying 2a00:1450:4008:802::2003...
* Connected to google.de (2a00:1450:4008:802::2003) port 80 (#0)
> GET / HTTP/1.1
> Host: google.de
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.de/
< Content-Type: text/html; charset=UTF-8
< Date: Fri, 12 Aug 2016 15:45:36 GMT
< Expires: Sun, 11 Sep 2016 15:45:36 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 218
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
<
* Ignoring the response-body
{ [218 bytes data]
* Connection #0 to host google.de left intact
* Issue another request to this URL: 'http://www.google.de/'
*   Trying 2a00:1450:4008:800::2003...
* Connected to www.google.de (2a00:1450:4008:800::2003) port 80 (#1)
> GET / HTTP/1.1
> Host: www.google.de
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 12 Aug 2016 15:45:36 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: NID=84=Z0WT_INFoDbf_0FIe_uHqzL9mf3DMSQs0mHyTEDAQOGY2sOrQaKVgN2domEw8frXvo4I3x3QVLqCH340HME3t1-6gNu8R-ArecuaneSURXNxSXYMhW2kBIE8Duty-_w7; expires=Sat, 11-Feb-2017 15:45:36 GMT; path=/; domain=.google.de; HttpOnly
< Accept-Ranges: none
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
<
{ [11080 bytes data]
* Connection #1 to host www.google.de left intact

Gördüğünüz gibi, curlhem giden hem de gelen üstbilgileri çıktılar ve bodydata size vücudun ne kadar büyük olduğunu söyleyerek atladı.

Ayrıca her satır için yön, okunması kolay olacak şekilde belirtilir. Uzun yönlendirme zincirlerini izlemeyi özellikle yararlı buldum.


4
Ben daha -vyüksek oy ile seçenek daha iyi gibi . Ayrıca, sadece kısalık için bu , sonuçta geldiği curl -Lvso /dev/null <target>sürece de olabilir o.
shriek

12

Aşağıdaki gibi bir komut üç bölüm gösterir: istek başlıkları, yanıt başlıkları ve veriler (CRLF ile ayrılmış). Kıvrılma ile eklenen teknik bilgileri ve sözdizimsel gürültüyü önler.

curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'

Komut aşağıdaki çıktıyı üretir:

GET / HTTP/1.1
Host: www.stackoverflow.com
User-Agent: curl/7.54.0
Accept: */*

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://stackoverflow.com/
Content-Length: 149
Accept-Ranges: bytes
Date: Wed, 16 Jan 2019 20:28:56 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-bma1622-BMA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1547670537.588756,VS0,VE105
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Set-Cookie: prov=e4b211f7-ae13-dad3-9720-167742a5dff8; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://stackoverflow.com/">here</a></body>

Açıklama:

  • -vs - üstbilgi ekle (-v) ancak ilerleme çubuğunu kaldır (-s)
  • 2>&1 - stdout ve stderr'i tek bir stdout'ta birleştirin
  • sed - curl tarafından üretilen yanıtı aşağıdaki komutları kullanarak düzenleyin
  • /^* /d - '*' ile başlayan satırları kaldır (teknik bilgi)
  • /bytes data]$/d - 'bayt verileri]' ile biten satırları kaldır (teknik bilgi)
  • s/> // - '>' önekini kaldır
  • s/< // - '<' önekini kaldır

7

Web uygulamalarında hata ayıklarken bu sorunun üstesinden gelmek zorunda kaldım. -vharika, ama benim zevkime göre biraz fazla ayrıntılı. Bu geldiğim (sadece bash) çözüm:

curl -v http://example.com/ 2> >(sed '/^*/d')

Bu, çıkışının -vstdout'a değil, stderr'a gönderildiği için çalışır . Bunu bir alt kabuğa yönlendirerek, sedile başlayan satırları kaldırabiliriz *. Gerçek çıktı alt kabuktan geçmediği için etkilenmez. Alt kabuk kullanmak biraz ağırdır, ancak stderr'ı başka bir komuta yönlendirmenin en kolay yolu. (Belirttiğim gibi, bunu sadece test için kullanıyorum, bu yüzden benim için iyi çalışıyor.)


4

kıvrılma için -v seçeneği, *satır aralığı (durum satırı) veya >(istek başı alanı) veya <(yanıt başı alanı) içeren hata çıktısında çok ayrıntılıdır . yalnızca istek başlığı alanını almak için:

curl -v -sS www.stackoverflow.com 2>&1 >/dev/null | grep '>' | cut -c1-2 --complement

yalnızca istek başlığı alanını almak için:

curl -v -sS www.stackoverflow.com 2>&1 >/dev/null | grep '<' | cut -c1-2 --complement

veya /tmp/test.txt-D seçeneği ile dosyaya dökmek için

curl -D /tmp/test.txt -sS www.stackoverflow.com > /dev/null

-vçıkışı filtrelemek için hata çıkışını terminale ve std çıkışını / dev / null'a yönlendirmelisiniz, -s seçeneği ilerleme ölçümünü yasaklamaktır


1

Eğer daha fazla alternatifler istiyorsanız, Sen gibi modern bir komut satırı HTTP istemcisi yüklemeyi deneyebilirsiniz httpie demlemek gibi paket yöneticileri, apt-get, pip, yum vs ile İşletim Sistemleri çoğu için kullanılabilir olduğu

ör .: OSX için

brew install httpie

Sonra yapabilirsiniz kullanmak çeşitli seçeneklerle komut satırında bunu

http GET https://www.google.com

resim açıklamasını buraya girin

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.