कैसे जांचें कि क्या कर्ल जैसे कमांड त्रुटि के बिना पूरा हुआ है?


24

मैं एक HTTP पोस्ट के माध्यम से सर्वर पर फ़ाइल अपलोड करने के लिए कर्ल का उपयोग कर रहा हूं।

curl -X POST -d@myfile.txt server-URL

जब मैं मैन्युअल रूप से कमांड लाइन पर इस कमांड को निष्पादित करता हूं, तो मुझे सर्वर की तरह प्रतिक्रिया मिलती है "Upload successful"। हालांकि, अगर मैं स्क्रिप्ट के माध्यम से इस कर्ल कमांड को निष्पादित करना चाहता हूं, तो मुझे कैसे पता चलेगा कि मेरा POST अनुरोध सफल रहा है?

जवाबों:


21

सबसे आसान तरीका प्रतिक्रिया को संग्रहीत करना और उसकी तुलना करना है:

$ response=$(curl -X POST -d@myfile.txt server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;

मैंने वह परीक्षण नहीं किया है। वाक्यविन्यास बंद हो सकता है, लेकिन यह विचार है। मुझे यकीन है कि इसे करने के और अधिक परिष्कृत तरीके हैं जैसे कर्ल के निकास कोड या कुछ और की जाँच करना।

अद्यतन करें

curlकुछ निकास कोड लौटाता है। मैं अनुमान लगा रहा हूं कि एक विफल पोस्ट का परिणाम हो सकता है 55 Failed sending network data.इसलिए आप शायद यह सुनिश्चित कर सकें कि $?( Expands to the exit status of the most recently executed foreground pipeline.) की तुलना में बाहर निकलने का कोड शून्य था।

$ curl -X POST -d@myfile.txt server-URL;
$ if [ 0 -eq $? ]; then … fi;

या यदि आपकी कमांड अपेक्षाकृत कम है और आप कुछ करना चाहते हैं जब यह विफल हो जाता है, तो आप बाहर निकलने के कोड पर भरोसा कर सकते हैं जैसे सशर्त स्थिति में:

$ if curl --fail -X POST -d@myfile.txt server-URL; then
    # …(success)
else
    # …(failure)
fi;

मुझे लगता है कि यह प्रारूप अक्सर पसंद किया जाता है , लेकिन व्यक्तिगत रूप से मुझे यह कम पठनीय लगता है।


20

आप curl's --failविकल्प का उपयोग करने में सक्षम हो सकते हैं , हालांकि आपको पहले एक बार इसका परीक्षण करना चाहिए।

man curl

-f, --fail (HTTP) सर्वर त्रुटियों पर चुपचाप (सभी में कोई आउटपुट नहीं) विफल। यह ज्यादातर असफल प्रयासों से बेहतर तरीके से स्क्रिप्ट आदि को सक्षम करने के लिए किया जाता है। सामान्य मामलों में जब एक HTTP सर्वर एक दस्तावेज़ देने में विफल रहता है, तो यह एक HTML दस्तावेज़ को बताते हुए लौटाता है (जो अक्सर यह भी बताता है कि क्यों और अधिक)। यह ध्वज आउटपुट से वेंट कर्ल को पूर्व देगा और त्रुटि 22 को लौटाएगा।

          This method is not fail-safe and there are occasions where  non-
          successful  response  codes  will  slip through, especially when
          authentication is involved (response codes 401 and 407).

इस तरह आप बस कर सकते हैं:

args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.