एक क्लिक का जादू: Postman कैसे Curl में बदलता है?
\n\nजो कोई भी API के साथ काम करता है, वह इस स्थिति को जानता है: आपने Postman में एक परफेक्ट रिक्वेस्ट सेट किया, सब कुछ ठीक चल रहा है, और फिर आपको यह रिक्वेस्ट अपने सहकर्मी को भेजनी है या PHP स्क्रिप्ट में डालनी है। आप "Code" पर क्लिक करते हैं → cURL चुनते हैं → और एक तैयार कमांड मिल जाती है। जादू? नहीं, यह सिर्फ गणित और पार्सिंग है।
\n\nलेकिन क्या होगा अगर आपको इस प्रक्रिया को ऑटोमेट करना हो? या अपना खुद का कन्वर्टर बनाना हो जो JSON रिक्वेस्ट को एक्जीक्यूटेबल curl में बदल दे? आज हम इस मैकेनिज्म को समझेंगे और PHP में एक फंक्शन लिखेंगे जो वही करता है जो Postman करता है — बस अपने हाथों से।
यह सामग्री न केवल backend डेवलपर्स के लिए, बल्कि उन सभी के लिए उपयोगी है जो HTTP रिक्वेस्ट को गहराई से समझना चाहते हैं और उन्हें एक फॉर्मेट से दूसरे में बदलना चाहते हैं। चलिए शुरू करते हैं!
\n\nवास्तव में "Postman to Curl" क्या है?
\n\nजब आप Postman में एक्सपोर्ट बटन दबाते हैं, तो प्रोग्राम एक सरल लेकिन महत्वपूर्ण काम करता है: यह रिक्वेस्ट का स्ट्रक्चर्ड विवरण (मेथड, URL, हेडर, बॉडी) लेता है और इसे कमांड लाइन सिंटैक्स में बदल देता है।
\n\nअसल में, यह रिक्वेस्ट का रूपांतरण है — एक प्रस्तुति से दूसरी में। Postman रिक्वेस्ट को अपने इंटरनल JSON मॉडल में स्टोर करता है। जब आप cURL चुनते हैं, तो यह इस मॉडल पर इटरेट करता है और एक स्ट्रिंग बनाता है जैसे:
\n\ncurl --request POST \\\n --url https://api.example.com/data \\\n --header 'Content-Type: application/json' \\\n --data '{"key":"value"}'\n\nसब कुछ सरल है। लेकिन आइए देखें कि यह कोड स्तर पर कैसे काम करता है।
\n\nPHP में अपना खुद का कन्वर्टर बनाएं
\n\nहम एक क्लास PostmanToCurl लिखेंगे जो रिक्वेस्ट पैरामीटर्स के साथ एक एसोसिएटिव ऐरे लेता है और एक तैयार curl कमांड स्ट्रिंग लौटाता है। यह हमारा मिनी-कन्वर्जन इंजन होगा।
चरण 1. इनपुट डेटा की संरचना तय करें
\n\nसरलता के लिए, हम मान लेते हैं कि इनपुट में ये कीज़ हैं: method, url, headers (एसोसिएटिव ऐरे), body (स्ट्रिंग या ऐरे)। यह न्यूनतम मॉडल है जो Postman उपयोग करता है।
<?php\n\n$request = [\n 'method' => 'POST',\n 'url' => 'https://api.example.com/users',\n 'headers' => [\n 'Content-Type' => 'application/json',\n 'Authorization' => 'Bearer token123'\n ],\n 'body' => json_encode(['name' => 'John', 'email' => 'john@example.com'])\n];\n\nचरण 2. असेंबली फंक्शन लिखें
\n\nमुख्य लॉजिक: मेथड, URL, हेडर, बॉडी लें और उन्हें एक कमांड में जोड़ें। कोट्स और स्पेशल कैरेक्टर्स को एस्केप करने पर ध्यान दें।
\n\nfunction generateCurlCommand(array $request): string {\n $parts = ['curl'];\n\n // 1. मेथड (अगर GET नहीं है)\n if (strtoupper($request['method']) !== 'GET') {\n $parts[] = '--request ' . strtoupper($request['method']);\n }\n\n // 2. URL\n $parts[] = '--url ' . escapeshellarg($request['url']);\n\n // 3. हेडर\n foreach ($request['headers'] as $key => $value) {\n $parts[] = '--header ' . escapeshellarg($key . ': ' . $value);\n }\n\n // 4. रिक्वेस्ट बॉडी\n if (!empty($request['body'])) {\n $parts[] = '--data ' . escapeshellarg($request['body']);\n }\n\n return implode(" \\\\\\n ", $parts);\n}\n\nफंक्शन escapeshellarg आपका सबसे अच्छा दोस्त है। यह कोट्स को सही तरीके से एस्केप करता है, कमांड को टूटने और संभावित इंजेक्शन से बचाता है।
अंदर की बात: Postman वास्तव में क्या करता है
\n\nअब जब हमारे पास काम करने वाला कोड है, तो आइए देखें कि Postman (और हमारा कन्वर्टर) रिक्वेस्ट के प्रत्येक एलिमेंट को कैसे प्रोसेस करता है।
\n\n1. HTTP मेथड
\nPostman जांचता है कि मेथड GET से अलग है या नहीं। अगर हाँ, तो यह --request फ्लैग जोड़ता है। GET के लिए क्यों नहीं? क्योंकि cURL डिफ़ॉल्ट रूप से GET रिक्वेस्ट करता है, जब तक कि अन्यथा निर्दिष्ट न हो।