सवाल HTTP स्थिति कोड आउटपुट करने के लिए कर्ल प्राप्त करना?


मैं उपयोग कर रहा हूँ curl HTTP अनुरोध जारी करने के लिए लिनक्स पर कमांड लाइन पर। प्रतिक्रिया निकायों को मानक आउट के लिए मुद्रित किया जाता है, जो ठीक है, लेकिन मैं मैन पेज से नहीं देख सकता कि प्रतिक्रिया से HTTP स्थिति कोड मुद्रित करने के लिए कर्ल कैसे प्राप्त करें (404, 403 इत्यादि)। क्या यह संभव है?


618
2018-04-18 10:28


मूल


मेरे लिए, मैं मैन्युअल से देख सकता हूं कि HTTP स्थिति कोड कैसे प्राप्त करें, लेकिन विकल्प -w काम नहीं करता है। मैंने ऐप्पल को बग की सूचना दी है। - Nicolas Barbulesco
-i झंडा, के रूप में curl -i https://www.example.com/, शायद आप क्या चाहते हैं, के अनुसार superuser.com/a/514798/190188 - caw


जवाब:


यह आपके लिए काम करना चाहिए अगर वेब सर्वर हेड अनुरोधों का जवाब देने में सक्षम है (यह एक प्रदर्शन नहीं करेगा GET):

curl -I http://www.example.org

एक अतिरिक्त के रूप में, curl को रीडायरेक्ट (3xx स्थिति) एड-एल का पालन करने दें।


383
2018-04-18 10:56



ध्यान दें: curl -I एक हेड HTTP अनुरोध करता है, जो कुछ वेब अनुप्रयोग सर्वरों और सेवाओं के लिए HTTP स्थिति कोड का परीक्षण करने के लिए समस्याग्रस्त हो सकता है - Jay Taylor
और केवल स्थिति संख्या प्राप्त करने के लिए, इसे पाइप करें head -n 1|cut -d$' ' -f2 - Benubird
कर्ल के stderr पुनर्निर्देशित करने के लिए मत भूलना: curl -I http://www.example.org 2>/dev/null | head -n 1 | cut -d$' ' -f2। रीडायरेक्ट के बाद अंतिम स्थिति की आवश्यकता होने पर एड-एल को कर्ल करने के लिए। - Aaron Blenkush
केवल हेड अनुरोध करने के बाद रीडायरेक्ट के बाद, ऐप प्रोग्राम किए जाने के तरीके के आधार पर दिलचस्प व्यवहार हो सकता है। - Scott McIntyre
curl -I -X GETएक जीईटी अनुरोध भेज देंगे, लेकिन एक ही आउटपुट दें। - jiggy


प्रिंट करने के लिए एक और विशिष्ट तरीका है केवल HTTP स्थिति कोड निम्न के साथ कुछ है:

curl -s -o /dev/null -w "%{http_code}" http://www.example.org/

स्क्रिप्ट में काम करना बहुत आसान है, क्योंकि इसे किसी भी पार्सिंग की आवश्यकता नहीं है :-)

पैरामीटर- मुझे प्रतिक्रिया लोड प्रदर्शन में सुधार करने के लिए जोड़ा जा सकता है। यह पैरामीटर केवल प्रतिक्रिया प्रतिक्रिया स्थिति के बिना प्रतिक्रिया के स्थिति / शीर्षकों के लिए अनुरोध करता है। (% {http_code} HTTP पेलोड की पहली पंक्ति पर लौटाता है)

अर्थात।:

curl -s -o /dev/null -I -w "%{http_code}" http://www.example.org/

665
2018-06-28 00:25



-w "% {http_code}" वह बिट है जो स्टेटस कोड प्रिंट करता है। आप शरीर से कोड को अलग करने के लिए वहां एक नई लाइन या दो जोड़ सकते हैं (-w "\ n \ n% {http_code} \ n") - Jeffrey Martinez
वाह, यह /dev/null चीज का उपयोग कर रहे कर्ल के विंडोज संस्करण में भी काम करता है। - Uwe Keim
मेरा मानना ​​है कि यह पूरी फाइल डाउनलोड करता है भले ही यह सभी / dev / null पर जाता है, इसलिए विशाल फ़ाइलों के लिए स्थिति कोड की जांच के लिए आदर्श नहीं है। httping -c 1 -s -G -m एक जीईटी जारी करता है और पूरी फ़ाइल डाउनलोड नहीं करता है, हालांकि मुझे एहसास है कि यह सवाल विशेष रूप से कर्ल के बारे में है। - RomanSt
@romkyns, आप सही हैं: मेरे उत्तर में पहला संस्करण पूरी फ़ाइल डाउनलोड करता है और इसे "सहेजता है" /dev/null, लेकिन दूसरा संस्करण - यानी। एक का उपयोग कर -I के लिए विकल्प curl - नहीं करता हालांकि, देखभाल की जानी चाहिए, क्योंकि आप वास्तव में एक ही कार्रवाई का परीक्षण नहीं कर रहे हैं: एक HTTP है GET अनुरोध, जबकि दूसरा बनाता है HEAD अनुरोध ... कुछ वेबसर्वर / वेबसाइट एक अलग स्थिति कोड के साथ प्रतिक्रिया देंगे, भले ही अनुरोध किया गया यूआरएल बिल्कुल वही है! - pvandenberk
जानकारी के लिए: -s = डाउनलोड प्रगति न दिखाएं, -o /dev/null = शरीर को प्रदर्शित न करें, -w "%{http_code}" = बाहर निकलने के बाद stdout पर http प्रतिक्रिया कोड लिखें। - Ajedi32


यदि आप शीर्षलेख के साथ-साथ परिणाम देखना चाहते हैं तो आप वर्बोज़ विकल्प का उपयोग कर सकते हैं:

curl -v http://www.example.org
curl --verbose http://www.example.org

स्थिति हेडर में दिखाई देगी। जैसे

< Date: Tue, 04 Nov 2014 19:12:59 GMT
< Content-Type: application/json; charset=utf-8
< Status: 422 Unprocessable Entity

177
2018-05-03 04:28



वर्बोज़ ध्वज को इंगित करने के लिए +1 अतिरिक्त विवरण प्रदान करता है। आरईएसटी ऐप्स का परीक्षण करने के लिए बढ़िया। - MrOodles
POST अनुरोध करते समय उपयोग करने के लिए +1 बहुत आसान है (curl -v --data "...") - MegaTux
यह उन्हें दो अलग-अलग फ़ाइल आउटपुट में भी विभाजित करता है (stderr के लिए http स्थिति विवरण और stdout के लिए प्रतिक्रिया शरीर) - Blauhirn


आप निम्न कार्य करके सभी शीर्षकों के अतिरिक्त स्थिति कोड प्रिंट कर सकते हैं:

curl -i http://example.org

के बारे में अच्छी बात है -i यह है कि यह के साथ काम करता है -X POST भी।


153
2017-12-04 20:45



स्वीकार्य उत्तर से अधिक बेहतर (जो एक हेड अनुरोध करता है)। - neu242
शायद स्पष्ट है, लेकिन -i के साथ काम करता है कोई भी HTTP विधि, न सिर्फ GET तथा POST... :) - mac
सबसे अच्छा जवाब क्योंकि यह दोनों शीर्षकों और शरीर को कर्ल आउटपुट बनाता है, जो इसे स्क्रिप्ट में उपयोग किए जाने वाले अधिकांश कार्यों के लिए उपयुक्त बनाता है - Sarge Borsch
यह सबसे अच्छा जवाब है, और इसका उपयोग संयोजन के साथ किया जा सकता है -s (प्रगति मीटर या त्रुटि संदेश नहीं दिखाएं) और -S(सभी के बाद त्रुटि संदेश दिखाएं) - Jonathan Hartley


यदि आप एक चर में HTTP स्थिति कोड को कैप्चर करना चाहते हैं, लेकिन फिर भी सामग्री को STDOUT पर रीडायरेक्ट करना चाहते हैं, तो आपको दो STDOUT बनाना होगा। आप इसके साथ ऐसा कर सकते हैं प्रक्रिया प्रतिस्थापन> () तथा कमांड प्रतिस्थापन $ ()

सबसे पहले, एक फ़ाइल वर्णनकर्ता बनाएँ 3 आपकी वर्तमान प्रक्रिया के लिए 'STDOUT के साथ exec 3>&1

फिर, कर्ल का उपयोग करें -o कमांड प्रतिस्थापन का उपयोग कर प्रतिक्रिया सामग्री को अस्थायी फीफो में रीडायरेक्ट करने का विकल्प, और फिर उस कमांड प्रतिस्थापन के भीतर, आउटपुट को अपनी वर्तमान प्रक्रिया में वापस रीडायरेक्ट करें STDOUT फ़ाइल डिस्क्रिप्टर 3 साथ में -o >(cat >&3)

इसे सब एक साथ रखकर bash  3.2.57(1)-release (के लिए मानक macOS):

#creates a new file descriptor 3 that redirects to 1 (STDOUT)
exec 3>&1 
# Run curl in a separate command, capturing output of -w "%{http_code}" into HTTP_STATUS
# and sending the content to this command's STDOUT with -o >(cat >&3)
HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example.com')

ध्यान दें कि यह काम नहीं करता है /bin/sh जैसा सैम ने नीचे दी गई टिप्पणियों में उल्लेख किया


49
2018-01-08 20:59



यह गंभीर slickery है ... और मुझे यह पसंद है! - spyle
अब, बदले में, क्या मैं आउटपुट को किसी अन्य चर पर रीडायरेक्ट कर सकता हूं? - Roger Filmyer
आउटपुट में है STDOUT, इसलिए आप आदेश से आउटपुट को कहीं भी नियमित आदेश की तरह रीडायरेक्ट करने में सक्षम होना चाहिए। हालांकि मैंने इसका परीक्षण नहीं किया है। - Heath Borders
/ Bin / sh के साथ काम नहीं करता है। - SamK


कर्ल आउटपुट को फिर से परिभाषित करें:

curl -sw '%{http_code}' http://example.org

किसी भी अनुरोध प्रकार के साथ इस्तेमाल किया जा सकता है।


27
2017-08-05 18:18



-k (--insecure) ओवरराइडिंग है (एस) (चुप)। - Ravichandra


यह यूआरएल के लिए एक अनुरोध भेजेगा, प्रतिक्रिया की पहली पंक्ति प्राप्त करें, इसे ब्लॉक पर विभाजित करें और दूसरा चुनें।

इसमें प्रतिक्रिया कोड है

curl -I http://example.org 2>/dev/null | head -n 1 | cut -d$' ' -f2

10
2017-07-15 20:08



क्या आप समझा सकते हैं कि यह कोड क्या करता है और यह ओपी द्वारा दी गई समस्या को कैसे संबोधित करता है? अस्पष्ट कोड उपयोगकर्ताओं के लिए अविश्वसनीय और खतरनाक दिखाई दे सकता है। - bwDraco
निश्चित रूप से, हम यूआरएल के लिए एक अनुरोध भेजते हैं, प्रतिक्रिया की पहली पंक्ति प्राप्त करते हैं, इसे ब्लॉक पर विभाजित करते हैं और दूसरे का चयन करते हैं। इसमें प्रतिक्रिया कोड शामिल है जिसे ओपी ढूंढ रहा है। - Filip Spiridonov


स्थिति का कोड केवल

[0]$ curl -LI http://www.example.org -o /dev/null -w '%{http_code}\n' -s
[0]$ 200

इस पर सभी क्रेडिट GIST


10
2018-02-08 10:44