Chrome का उपयोग करके GET अनुरोध प्राप्त करने के लिए कर्ल का उपयोग कैसे करें?


85

मेरे पास एक वेब एपी है http://something.com/apiऔर मैं प्रतिक्रिया निकाय प्राप्त करने के लिए जीईटी का उपयोग करना चाहता हूं।

यह मेरी आज्ञा है:

curl "http://something.com/api"

बेशक, यह विफल हो जाता है और एक त्रुटि संदेश देता है।

जब मैं Chrome का उपयोग करता हूं और उपरोक्त url इनपुट करता हूं, तो सभी सही होते हैं। हालाँकि मैं फ़ायरफ़ॉक्स के साथ वही काम करता हूँ, url मुझे वही त्रुटि संदेश देता है। मैं क्रोम एक्सटेंशन डीएचसी के साथ कार्रवाई दोहराने की कोशिश करता हूं, अनुरोध फिर से सही प्रतिक्रिया देता है। कुछ खोज के बाद, मेरा मानना ​​है कि कर्ल विकल्प --user-agentसे फर्क पड़ता है। उपयोगकर्ता एजेंट को क्रोम पर सेट करने का सही तरीका क्या है? या यह बात नहीं है, समस्या अन्य क्षेत्रों से आती है? आपका बहुत बहुत धन्यवाद।

जवाबों:


122

यदि आपको कर्ल अनुरोध में उपयोगकर्ता हेडर स्ट्रिंग सेट करने की आवश्यकता है, तो आप -Hउपयोगकर्ता एजेंट सेट करने के लिए विकल्प का उपयोग कर सकते हैं जैसे:

curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

चार्ल्स प्रॉक्सी जैसे प्रॉक्सी टूल का उपयोग करने से वास्तव में किसी चीज के कम काम करने में मदद मिलती है जैसे आप पूछ रहे हैं। यहाँ मैं क्या करता हूँ, उदाहरण के रूप में इस एसओ पृष्ठ का उपयोग करना (जुलाई 2015 तक चार्ल्स संस्करण 3.10 का उपयोग करके):

  1. चार्ल्स प्रॉक्सी चला रहे हैं
  2. ब्राउज़र का उपयोग करके वेब अनुरोध करें
  3. चार्ल्स प्रॉक्सी में वांछित अनुरोध खोजें
  4. चार्ल्स प्रॉक्सी में अनुरोध पर राइट क्लिक करें
  5. 'कॉपी क्यूरल रिक्वेस्ट' का चयन करें

चार्ल्स 3.10.2 में प्रतिलिपि अनुरोध अनुरोध उदाहरण

अब आपके पास एक cURL अनुरोध है जिसे आप एक टर्मिनल में चला सकते हैं जो आपके ब्राउज़र द्वारा किए गए अनुरोध को प्रतिबिंबित करेगा। यहाँ इस पृष्ठ के लिए मेरा अनुरोध ऐसा है जैसे (कुकी हेडर हटाए जाने के साथ):

curl -H "Host: stackoverflow.com" -H "Cache-Control: max-age=0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" -H "HTTPS: 1" -H "DNT: 1" -H "Referer: https://www.google.com/" -H "Accept-Language: en-US,en;q=0.8,en-GB;q=0.6,es;q=0.4" -H "If-Modified-Since: Thu, 23 Jul 2015 20:31:28 GMT" --compressed http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

यह बहुत बेहतर होगा अगर चार्ल्स एक ही बार में कई cURL अनुरोधों की नकल / निर्यात का समर्थन करता है
समझदार

कुछ एपीआई, जैसे आर्कजीआईएस, केवल Accept: text/htmlएचटीएमएल आउटपुट को मजबूर करने के लिए हेडर का सम्मान करेंगे ।
sventechie

2
कर्ल -एजेंट_नाम एक शॉर्ट कट है
ppostma1

23

Chrome डेवलपर टूल खोलें, नेटवर्क टैब पर जाएं, अपना अनुरोध करें (यदि पृष्ठ ताज़ा होता है तो आपको "संरक्षित लॉग" की जांच करने की आवश्यकता हो सकती है)। बाईं ओर अनुरोध ढूंढें, राइट-क्लिक करें, "CURL के रूप में कॉपी करें"।


लेकिन "प्रतिलिपि के रूप में कॉपी" में कुकी कुछ मिनटों के भीतर समाप्त हो जाती है। अधिकांश साइटों के मामले में कम से कम। नई कुकी लाने के लिए मैं इसे कैसे स्वचालित कर सकता हूं?
गौरव कांसल

6

HTTP हेडर की जांच करें जो क्रोम अनुरोध के साथ भेज रहा है (ब्राउज़र एक्सटेंशन या प्रॉक्सी का उपयोग करके) फिर उसी हेडर को CURL के साथ भेजने का प्रयास करें - संभवतः एक समय में जब तक आप यह पता नहीं लगा लेते हैं कि कौन सा हेडर अनुरोध करता है।

कर्ल-ए [उपयोगकर्ता-एजेंट] -एच [हेडर] " http://something.com/api "


मैं इससे परिचित नहीं हूं। क्या आप मुझे उपयोगकर्ता-एजेंट को क्रोम और संभावित हेडर की स्थापना के लिए कुछ वास्तविक उदाहरण दे सकते हैं?
wdetac
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.