curl - कमांड लाइन कर्ल के साथ अनुरोध शीर्षलेख कैसे प्रदर्शित करें




(6)

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


PHP सेट कर्ल विकल्पों में

CURLINFO_HEADER_OUT => सत्य,

CURLOPT_HEADER => 1,

और शायद आसान लॉगिंग के लिए mysql में हेडर परिणाम डंप करें।

यदि F12 / Firebug देता है उससे अधिक विस्तृत के लिए ब्राउज़र का उपयोग करते हुए भी वायरशर्क का उपयोग कर सकते हैं


curl's -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

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

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

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

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

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

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

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


मेरा मानना ​​है कि कमांड लाइन स्विच जिसे आप कर्ल पास करने की तलाश में हैं- -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 स्थिति कोड का सामना करना पड़ता है, तो आप यूआरएल रीडायरेक्ट का पालन करने के लिए curl को बताने के लिए ए- -L तर्क स्विच भी पास करना चाहेंगे, और, इस मामले में, सभी पृष्ठों के शीर्षलेख मुद्रित करें (यूआरएल रीडायरेक्ट सहित) , नीचे दिखाया गया है:

$ 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

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

  • --trace-ascii - # stdout
  • --trace-ascii output_file.txt # फ़ाइल

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

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

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






curl