कर्ल -GET और -X GET


126

कर्ल विभिन्न HTTP मेथड कॉल्स की एक श्रृंखला प्रदान करता है जो एक एक्स के साथ उपसर्ग करते हैं, लेकिन बिना समान तरीके भी प्रदान करते हैं। मैंने दोनों की कोशिश की है और मैं अंतर का पता नहीं लगा सकता। क्या कोई मुझे जल्दी से समझा सकता है कि ये दोनों ऑपरेशन कैसे भिन्न हैं?

जवाबों:


263

डिफ़ॉल्ट रूप से आप स्पष्ट रूप से यह कहे बिना कर्ल का उपयोग करते हैं कि किस विधि का उपयोग करना है। यदि आप बस एक HTTP URL में पास करते हैं जैसे curl http://example.comयह GET का उपयोग करेगा। यदि आप POST का उपयोग करते हैं -dया -Fकर्ल करते हैं, -Iतो HEAD का कारण बनेगा और -Tइसे PUT करेगा।

यदि किसी भी कारण से आप इन डिफ़ॉल्ट विकल्पों से खुश नहीं हैं जो आपके लिए कर्ल करता है, तो आप उन अनुरोध विधियों को निर्दिष्ट करके ओवरराइड कर सकते हैं -X [WHATEVER]। इस तरह आप उदाहरण के लिए एक DELETE भेज कर कर सकते हैं curl -X DELETE [URL]

इस प्रकार यह करना व्यर्थ है curl -X GET [URL]क्योंकि वैसे भी GET का उपयोग किया जाएगा। एक ही नस में यह करने के लिए व्यर्थ है curl -X POST -d data [URL]...लेकिन आप एक मजेदार और कुछ हद तक दुर्लभ अनुरोध कर सकते हैं जो एक GET अनुरोध में कुछ के साथ एक अनुरोध-निकाय भेजता है curl -X GET -d data [URL]

गहरा खोदना

curl -GET(एकल डैश का उपयोग करना) इस उद्देश्य के लिए गलत है। यह निर्दिष्ट करने के बराबर है -G, -Eऔर -Tविकल्प और यह पूरी तरह से अलग कुछ करेगा।

एक कर्ल विकल्प भी है जिसे --getमामलों को भ्रमित न करने के लिए कहा जाता है। यह जी का लंबा रूप है, जिसका उपयोग पीओटी के -dबजाय जीईटी अनुरोध के साथ निर्दिष्ट डेटा को परिवर्तित करने के लिए किया जाता है ।

(बाद में मैंने इसे कवर करने के लिए कर्ल एफएक्यू को पॉप्युलेट करने के लिए अपने स्वयं के उत्तर का उपयोग किया ।)

चेतावनी

कर्ल के आधुनिक संस्करण उपयोगकर्ताओं को इस अनावश्यक और संभावित हानिकारक उपयोग के बारे में सूचित करेंगे जब क्रिया मोड सक्षम किया जाता है ( -v) - उपयोगकर्ताओं को जागरूक करने के लिए। इस ब्लॉग पोस्ट में आगे बताया और प्रेरित किया गया है ।

-G POST + बॉडी को GET + क्वेरी में कनवर्ट करता है

आप कर्ल को -dविकल्पों का एक सेट बदलने के लिए कह सकते हैं और उन्हें POST के साथ अनुरोध निकाय में भेजने के बजाय, URL के क्वेरी स्ट्रिंग के अंत में रख सकते हैं और `-G के उपयोग के साथ एक GET जारी करते हैं। ऐशे ही:

curl -d name=daniel -d grumpy=yes -G https://example.com/

5
-XGET कोई विकल्प नहीं हो सकता है, लेकिन यह स्पष्ट करता है।
मत्ती

"डिफ़ॉल्ट रूप से आप स्पष्ट रूप से यह कहे बिना कर्ल का उपयोग करते हैं कि कौन सी अनुरोध विधि का उपयोग करें। यदि आप बस HTTP URL जैसे कि कर्ल example.com में पास होते हैं तो यह GET का उपयोग करेगा। यदि आप -d या -F कर्ल का उपयोग POST का उपयोग करते हैं, तो -I का कारण होगा। एक HEAD और -T इसे PUT बना देगा। " सब कुछ जो आपके लिए जानना ज़रूरी है।
डोनाटो

4
जब भी आपके पास विकल्प हो, तब निहितार्थ की तुलना में स्पष्टीकरण बेहतर है। जल्दी असफल होना, तेजी से विफल होना, दुर्घटनाओं को कम करना, डिबग समय को कम करता है। आपके पास इसे लंघन के लिए एक ही समय है जब इसे कमांड लाइन में टाइप करना है। कड़ाई से अनावश्यक होने पर भी किसी भी स्क्रिप्ट को -XGET निर्दिष्ट करना चाहिए।
बैकगैमौन

1
अगर वे ऐसा करते हैं, तो वे गलत कर रहे हैं। लेकिन यकीन है, वे कर सकते हैं।
डैनियल स्टैनबर्ग

2

-X [अपनी विधि]
एक्स आपको डिफ़ॉल्ट 'गेट' को ओवरराइड करने देता है

** xअपरकेस को सही किया गयाX


2
यह इस सवाल का जवाब देने की कोशिश नहीं करता है कि "ये दोनों ऑपरेशन कैसे भिन्न हैं"।
मेलेबियस

1

HTTP अनुरोध में उपयोग -X [WHATEVER]किए गए अनुरोध की विधि स्ट्रिंग में केवल परिवर्तन का उपयोग होता है। यह दो उदाहरणों के साथ समझना आसान है - एक साथ -X [WHATEVER]और एक बिना - और प्रत्येक के लिए संबद्ध HTTP अनुरोध शीर्षलेख:

# curl -XPANTS -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.224.86.126) port 80 (#0)
> PANTS / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*

# curl -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.33.50.167) port 80 (#0)
> GET / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.