कमांड लाइन कर्ल के साथ अनुरोध हेडर कैसे प्रदर्शित करें


565

कमांड लाइन कर्ल -Dविकल्प का उपयोग करके प्रतिक्रिया हेडर प्रदर्शित कर सकता है, लेकिन मैं यह देखना चाहता हूं कि यह किस हेडर को भेज रहा है। मैं उसे कैसे कर सकता हूँ?


28
curl --head http://google.com-Iध्वज के समान ही काम करेंगे :)
हाबिल तेरेफ

9
उपयोग करने पर ध्यान दें --head/ -I: सभी सर्वर HEADअनुरोधों के लिए समान रूप से प्रतिक्रिया नहीं देते हैं (उदाहरण के लिए, Content-Encodingयदि आप यह सत्यापित करने का प्रयास कर रहे हैं कि शरीर gzipped होगा) और सभी सर्वर समर्थन नहीं कर रहे हैं तो गायब होगा HEAD-vआमतौर पर सुरक्षित विकल्प है।
cfeduke

जवाबों:


749

कर्ल -vया --verboseविकल्प HTTP अनुरोध हेडर, अन्य बातों के अलावा दिखाता है। यहाँ कुछ नमूना आउटपुट है:

$ 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
क्या होगा अगर मैं सिर्फ पैकेज का निर्माण करना चाहता हूं, लेकिन भेजना नहीं चाहता?
PuercoPop

@jacobsimeon मुझे लगता है कि क्योंकि यह न केवल अनुरोध हेडर दिखाता है, बल्कि रिस्पॉन्स हेडर और रिस्पॉन्स बॉडी भी दिखाता है
14

233

प्रतिक्रिया हेडर प्रदर्शित करने के लिए एक लोकप्रिय उत्तर , लेकिन ओपी ने अनुरोध हेडर के बारे में पूछा ।

curl -s -D - -o /dev/null http://example.com
  • -s : प्रगति पट्टी दिखाने से बचें
  • -D -: एक फ़ाइल के लिए हेडर डंप, लेकिन -इसे stdout को भेजता है
  • -o /dev/null : प्रतिक्रिया शरीर की उपेक्षा करें

यह बेहतर है -Iक्योंकि यह एक HEADअनुरोध नहीं भेजता है , जो विभिन्न परिणाम उत्पन्न कर सकता है।

यह बेहतर है -vक्योंकि आपको इसे अन-वर्बोस करने के लिए इतने सारे हैक्स की आवश्यकता नहीं है।


17
प्रश्न पढ़ें - यह प्रतिक्रिया के लिए हैडर्स हेडर का अनुरोध नहीं करते हैं
ग्रीम स्टुअर्ट

56
यह उत्तर मेरे लिए उपयोगी है क्योंकि मैंने प्रश्न को गलत भी बताया है।
लियाम

2
यह कमांड विंडोज के लिए थोड़ा अलग है: curl -sD - -o NULL http://example.com
सर्गेई व्लासोव

2
@SergeyVlasov वास्तव में, /dev/nullविंडोज के बराबर है nul, नहीं null
फ्रांसिस्को ज़ाराबोज़ो

2
भले ही यह प्रश्न अनुरोध हेडर के लिए पूछता है, लेकिन Google यहां हर किसी को निर्देश दे रहा है जो प्रतिक्रिया हेडर की तलाश कर रहा है, इसलिए हम सभी खुश हैं कि यह उत्तर यहां है। और यह उत्तर प्रतिक्रिया हेडर प्राप्त करने के लिए सबसे अच्छा है। धन्यवाद!!!
बायोमाइकर

96

मेरा मानना ​​है कि कमांड लाइन स्विच जिसे आप कर्ल में पास करना चाहते हैं, वह है -I

उदाहरण उपयोग:

$ 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

इसके अतिरिक्त, यदि आप 301 की प्रतिक्रिया HTTP स्थिति कोड का सामना करते हैं, तो आप URL पुनर्निर्देश का पालन करने के -Lलिए बताने के curlलिए एक तर्क स्विच भी पास करना पसंद कर सकते हैं , और, इस मामले में, सभी पृष्ठों के हेडर (URL रीडायरेक्ट सहित) प्रिंट करें, नीचे सचित्र :

$ 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
-Iविकल्प से पता चलता प्रतिक्रिया हेडर। सवाल अनुरोध हेडर के बारे में था ।
असफ

53
-Iविकल्पों का कारण बनता है एक ऐसा करने के लिए कर्ल HTTP HEAD, जो सर्वर से प्रतिक्रिया बदल सकता है। -vमुझे विश्वास है कि स्विच का उपयोग करने के लिए बेहतर है।
ac

1
यदि आप एक HEADअनुरोध (जैसे -X POST) के अलावा किसी और चीज के साथ यह कोशिश करते हैं और "आप केवल एक HTTP अनुरोध का चयन कर सकते हैं!" से stackoverflow.com/questions/286982/... शायद तुम बाहर में मदद मिलेगी। बात यह है कि -Iएक HEADअनुरोध करता है , जैसे acwकहा गया है और जब आपका curlकॉल किसी अन्य कॉल को करने के लिए सेट किया गया है तो आपके पास कॉल में दो HTTP अनुरोध curlहैं ...
फ्लू

7
यह बहुत गलत उत्तर है। (मैं वादा करता हूं कि मैं आमतौर पर यहां बहुत दयालु हूं।) 1. यह ओपी से जो पूछता है उसके विपरीत है। 2. यह या के HEADबजाय एक अनुरोध विधि का उपयोग करता है । 3. इसका उपयोग "केवल हेडर देखने के लिए" किया जाना चाहिए जब तक कि आप यह देखने की कोशिश नहीं कर रहे हैं कि आपका सर्वर ए के विपरीत एक अलग तरीके से कैसे प्रतिक्रिया करता है । यह ज्यादातर समय ऐसा ही रहेगा, लेकिन हमेशा नहीं। केवल हेडर का उपयोग देखने के लिए । यह अपेक्षित परिणाम 100% समय देगा। GETPOSTHEADGETcurl -o /dev/null -D /dev/stdout
ब्रूनो ब्रोंस्की

79

वर्बोज़ विकल्प आसान है, लेकिन अगर आप वह सब कुछ देखना चाहते हैं जो कर्ल करता है (HTTP बॉडी जो ट्रांसमिटेड है, और सिर्फ़ हेडर नहीं) सहित, मैं नीचे दिए विकल्पों में से एक का उपयोग करने का सुझाव देता हूं:

  • --trace-ascii - # स्टडआउट
  • --trace-ascii output_file.txt # फ़ाइल

मैं ऐसा नहीं सोचता क्योंकि यह प्रतिक्रिया हेडर और शरीर को भी दिखाता है!
पम्प्र

55

आपको निम्न कमांड के साथ एक अच्छा हेडर आउटपुट मिलता है:

 curl -L -v -s -o /dev/null google.de
  • -L, --location पुनर्निर्देश का पालन करें
  • -v, --verbose अधिक आउटपुट, दिशा को इंगित करता है
  • -s, --silent प्रगति पट्टी न दिखाएं
  • -o, --output /dev/null प्राप्त शरीर नहीं दिखा

या छोटा संस्करण:

 curl -Lvso /dev/null google.de

का परिणाम:

* 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

जैसा कि आप curlआउटगोइंग और इनकमिंग हेडर दोनों आउटपुट को देख सकते हैं और बॉडीडेटा को यह कहते हुए छोड़ देता है कि बॉडी कितनी बड़ी है।

इसके अतिरिक्त हर लाइन के लिए दिशा को इंगित किया जाता है ताकि इसे पढ़ना आसान हो। मुझे रिडायरेक्ट की लंबी श्रृंखलाओं का पता लगाने के लिए यह विशेष उपयोगी लगा।


4
मुझे -vउच्च वोटों के विकल्प से यह बेहतर लगता है। इसके अलावा, सिर्फ संक्षिप्तता के लिए यह भी अंत curl -Lvso /dev/null <target>में oआता है।
shriek

12

नीचे दिए गए एक कमांड की तरह तीन खंड दिखाई देंगे: अनुरोध हेडर, प्रतिक्रिया हेडर और डेटा (CRLF द्वारा अलग)। यह तकनीकी जानकारी और कर्ल द्वारा जोड़े गए वाक्यात्मक शोर से बचा जाता है।

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

कमांड निम्न आउटपुट का उत्पादन करेगी:

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>

विवरण:

  • -vs - हेडर (-v) जोड़ें, लेकिन प्रगति बार (-s) को हटा दें
  • 2>&1 - स्टैडआउट और स्टेडर को सिंगल स्टडआउट में मिलाएं
  • sed - नीचे दिए गए आदेशों का उपयोग करके कर्ल द्वारा निर्मित प्रतिक्रिया को संपादित करें
  • /^* /d - '*' (तकनीकी जानकारी) से शुरू होने वाली लाइनें हटाएं
  • /bytes data]$/d - 'बाइट्स डेटा]' (तकनीकी जानकारी) के साथ समाप्त होने वाली लाइनें हटाएं
  • s/> // - '>' उपसर्ग निकालें
  • s/< // - '<' उपसर्ग निकालें

7

वेब एप्लिकेशन डीबग करते समय मुझे स्वयं इस समस्या को दूर करना पड़ा। -vमहान है, लेकिन मेरे स्वाद के लिए थोड़ी बहुत क्रिया। यह (bash-only) समाधान है जिसके साथ मैं आया था:

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

यह काम करता है क्योंकि आउटपुट से -vstderr पर भेजा जाता है, stdout में नहीं। इसे एक उपधारा पर पुनर्निर्देशित करके, हम sedइसे उन पंक्तियों को हटाने के लिए कर सकते हैं जो इसके साथ शुरू होती हैं *। चूँकि वास्तविक आउटपुट उपधारा से होकर नहीं गुजरता है, इसलिए यह प्रभावित नहीं होता है। एक उप-प्रकार का उपयोग करना थोड़ा भारी-भरकम है, लेकिन यह किसी अन्य कमांड के लिए stderr को पुनर्निर्देशित करने का सबसे आसान तरीका है। (जैसा कि मैंने उल्लेख किया है, मैं केवल परीक्षण के लिए इसका उपयोग कर रहा हूं, इसलिए यह मेरे लिए ठीक काम करता है।)


4

कर्ल के लिए -v विकल्प त्रुटि आउटपुट में भी क्रिया है जिसमें अग्रणी *(स्थिति रेखा) या >(अनुरोध हेड फ़ील्ड) या <(प्रतिक्रिया हेड फ़ील्ड) शामिल है। केवल अनुरोध हेड फ़ील्ड प्राप्त करने के लिए:

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

केवल अनुरोध हेड फ़ील्ड प्राप्त करने के लिए:

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

या /tmp/test.txt-D विकल्प के साथ फाइल में डंप करने के लिए

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

-vआउटपुट को फ़िल्टर करने के लिए , आपको त्रुटि आउटपुट को टर्मिनल और std आउटपुट को / dev / null पर निर्देशित करना चाहिए, -s विकल्प प्रगति पैमाइश के लिए मना करना है


1

आप और अधिक विकल्प चाहते हैं, आप की तरह एक आधुनिक, आदेश पंक्ति HTTP ग्राहक स्थापित करने की कोशिश कर सकते हैं httpie जो काढ़ा की तरह पैकेज प्रबंधकों, apt-get, पिप, यम आदि के साथ आपरेटिंग सिस्टम के अधिकांश के लिए उपलब्ध है

जैसे: - OSX के लिए

brew install httpie

फिर आप विभिन्न विकल्पों के साथ कमांड लाइन पर इसका उपयोग कर सकते हैं

http GET https://www.google.com

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.