curl कमांड पेस्ट करें, चलने वाला कोड पाएँ
यह कन्वर्टर curl कमांड को JavaScript fetch, axios, Node.js, Python requests, Go net/http, PHP के curl एक्सटेंशन या Rust reqwest में उसी HTTP रिक्वेस्ट में बदल देता है। यह curl को वैसे ही पढ़ता है जैसे आपका shell और खुद curl पढ़ते हैं: सिंगल और डबल कोट, $'…' स्ट्रिंग, लाइन कंटिन्यूएशन, -sSL जैसे जोड़े गए फ़्लैग, बार-बार दिया गया -d डेटा और multipart -F फ़ील्ड। हेडर, कुकी, basic और bearer ऑथेंटिकेशन, JSON बॉडी, टाइमआउट और TLS सेटिंग साथ ले जाई जाती हैं, और जो कुछ भी बदला नहीं जा सकता, वह बताया जाता है। कमांड आपके ब्राउज़र में पार्स होती है और कहीं नहीं भेजी जाती, इसलिए उसमें मौजूद टोकन और कुकी निजी रहते हैं।
curl कमांड को कोड में कैसे बदलें
- 1किसी रिक्वेस्ट को curl के रूप में कॉपी करें। Chrome, Edge या Firefox में डेवलपर टूल खोलें, Network टैब पर जाएँ, किसी रिक्वेस्ट पर राइट-क्लिक करें और Copy › Copy as cURL चुनें। bash और Windows
cmdदोनों वैरिएंट काम करते हैं। - 2कमांड को बाएँ पैन में पेस्ट करें।
\या^कंटिन्यूएशन वाली कई लाइनों की कमांड भी ठीक हैं। - 3टारगेट भाषा चुनें: fetch, axios, Node.js, Python, Go, PHP या Rust, या पार्स की गई रिक्वेस्ट देखने के लिए JSON।
- 4कोड के नीचे दिए नोट पढ़ें, जिनमें उन फ़्लैग की जानकारी है जिन्हें अनदेखा किया गया या जिन पर ध्यान देना ज़रूरी है, फिर कोड कॉपी करें या फ़ाइल के रूप में डाउनलोड करें।
क्या-क्या बदला जाता है
- मेथड और URL
- -X/--request, --url, -G/--get (डेटा query string में चला जाता है), -I/--head, -T/--upload-file (PUT)। -X न हो तो मेथड वैसे ही चुना जाता है जैसे curl चुनता है: बॉडी हो तो POST, नहीं तो GET।
- हेडर
- -H/--header, -A/--user-agent, -e/--referer, -b/--cookie और -r/--range। दोहराए गए हेडर जोड़ दिए जाते हैं।
- बॉडी
- -d/--data, --data-raw, --data-binary और --data-urlencode (curl की तरह & से जोड़े जाते हैं), --json, और multipart -F/--form फ़ील्ड, जिनमें ;type= और ;filename= वाले फ़ाइल अपलोड भी शामिल हैं।
- ऑथेंटिकेशन
- basic auth के लिए -u/--user, --digest, --oauth2-bearer, और URL में लिखे क्रेडेंशियल।
- कनेक्शन विकल्प
- -k/--insecure, -L/--location, --compressed, -m/--max-time और -x/--proxy, जहाँ टारगेट भाषा में इनका विकल्प मौजूद हो।
JSON बॉडी असली ऑब्जेक्ट बन जाती है
जब बॉडी JSON हो, चाहे Content-Type ऐसा बताए या वह साफ़ तौर पर JSON हो, तो उसे फ़ॉर्मैट किया जाता है और जहाँ भाषा अनुमति दे, नेटिव वैल्यू के रूप में लिखा जाता है: fetch के लिए JSON.stringify को दिया गया ऑब्जेक्ट, axios के लिए सादा ऑब्जेक्ट, और Python requests के लिए json= के रूप में दी गई dictionary, जिसमें true, false और null को True, False और None में बदला जाता है। इसे escape की गई स्ट्रिंग की तुलना में एडिट करना कहीं आसान है। बॉडी को बाइट-दर-बाइट जैसी थी वैसी रखने के लिए JSON बॉडी फ़ॉर्मैट करें बंद करें।
ब्राउज़र fetch बनाम Node.js
दोनों fetch टारगेट अलग हैं, क्योंकि ब्राउज़र सीमित करते हैं कि कोई पेज क्या भेज सकता है। ब्राउज़र में चलने वाली स्क्रिप्ट Cookie, Referer, Host, Accept-Encoding या कोई भी Sec- हेडर सेट नहीं कर सकती, सर्टिफ़िकेट जाँच छोड़ नहीं सकती और किसी path से फ़ाइल नहीं पढ़ सकती। ब्राउज़र टारगेट बताता है कि कौन-से हेडर हटा दिए जाएँगे। Node.js टारगेट ये सब कर सकता है: फ़ाइलें openAsBlob और readFile से पढ़ी जाती हैं, और --insecure या proxy एक undici dispatcher बन जाते हैं।
रिक्वेस्ट चलने के बाद रिस्पॉन्स स्टेटस का मतलब जानने के लिए HTTP स्टेटस कोड रेफ़रेंस देखें। जिन query वैल्यू को escape करना हो, उन्हें URL एनकोडर से एनकोड किया जा सकता है।
कोटिंग के नियम, संभाले हुए
कन्वर्ज़न की ज़्यादातर गलतियाँ कोट्स से आती हैं। POSIX shell में सिंगल कोट हर चीज़ को ज्यों का त्यों रखते हैं, डबल कोट फिर भी \" और \$ को प्रोसेस करते हैं, और $'…' \n और \x41 जैसे escape समझता है। लाइन के आख़िर में बैकस्लैश कमांड को आगे जारी रखता है। Windows cmd इसके बजाय escape और कंटिन्यूएशन के लिए ^ इस्तेमाल करता है, और "Copy as cURL (cmd)" यही बनाता है। टोकनाइज़र इनमें से हर नियम का पालन करता है, इसलिए आपका कोड ठीक वही बॉडी भेजता है जो curl भेजता।
pipe, सेमीकोलन या redirect के बाद की कोई भी चीज़, जैसे | jq ., curl की नहीं बल्कि shell की होती है, और उसे एक नोट के साथ अनदेखा किया जाता है।
अक्सर पूछे जाने वाले सवाल
- क्या मेरी curl कमांड किसी सर्वर पर भेजी जाती है?
- नहीं। कमांड आपके ब्राउज़र में पार्स होती है और कोड वहीं बनता है। उसमें मौजूद टोकन, कुकी और पासवर्ड कभी आपके डिवाइस से बाहर नहीं जाते।
- ब्राउज़र से किसी रिक्वेस्ट को curl के रूप में कैसे कॉपी करें?
- डेवलपर टूल (F12) खोलें, Network टैब चुनें, रिक्वेस्ट पर राइट-क्लिक करें और Copy चुनें, फिर Copy as cURL। Windows पर bash या cmd में से कोई भी वर्ज़न यहाँ पेस्ट किया जा सकता है।
- कौन-से curl विकल्प सपोर्ट होते हैं?
- वे विकल्प जो रिक्वेस्ट तय करते हैं: मेथड, URL, हेडर, कुकी, -d के सभी वैरिएंट, --json, -F फ़ॉर्म, -u ऑथेंटिकेशन, -G, -I, -T, -L, -k, --compressed, --max-time और --proxy। -s, -o और -v जैसे आउटपुट विकल्प रिक्वेस्ट पर असर नहीं डालते और अनदेखे किए जाते हैं।
- ब्राउज़र fetch कोड कुछ हेडर क्यों छोड़ देता है?
- ब्राउज़र स्क्रिप्ट को Cookie, Referer, Host और Accept-Encoding जैसे हेडर सेट करने से रोकते हैं, और fetch उन्हें चुपचाप हटा देता है। अगर आपको इन्हें भेजना है तो Node.js टारगेट इस्तेमाल करें।
- फ़ाइल अपलोड कैसे बदले जाते हैं?
- file=@photo.jpg जैसा -F फ़ील्ड एक multipart फ़ाइल फ़ील्ड बन जाता है, जो Node.js, Python, Go, PHP और Rust में डिस्क से photo.jpg पढ़ता है। ब्राउज़र fetch में यह <input type="file"> से चुनी गई फ़ाइल इस्तेमाल करता है, क्योंकि पेज path से फ़ाइल नहीं पढ़ सकते।
- --data-urlencode क्या करता है?
- यह वैल्यू को भेजने से पहले percent-encode करता है, इसलिए name=a b&c को name=a%20b%26c के रूप में भेजा जाता है। कन्वर्टर भी वही एनकोडिंग लागू करता है, इसलिए बना हुआ कोड वही बाइट भेजता है।
- क्या curl redirect को फ़ॉलो करता है?
- तब तक नहीं जब तक आप -L न दें। ज़्यादातर HTTP लाइब्रेरी डिफ़ॉल्ट रूप से redirect फ़ॉलो करती हैं, इसलिए बना हुआ कोड आमतौर पर किसी भी हाल में उन्हें फ़ॉलो करता है; PHP का curl एक्सटेंशन सिर्फ़ तभी करता है जब -L दिया गया हो।