परिचय: जावा में HTTP क्लाइंट की आवश्यकता क्यों है?
\n\nआधुनिक जावा डेवलपमेंट शायद ही कभी बाहरी सेवाओं के साथ बातचीत के बिना होता है। चाहे वह सर्वर पर डेटा भेजना हो, REST API से जानकारी प्राप्त करना हो, या क्लाउड प्लेटफॉर्म के साथ एकीकरण करना हो - हर जगह HTTP क्लाइंट की आवश्यकता होती है। जावा में HTTP अनुरोध करने के कई तरीके हैं, और सही दृष्टिकोण चुनना महत्वपूर्ण है।
\n\nलंबे समय तक, मानक उपकरण लाइब्रेरी java.net.HttpURLConnection थी, लेकिन जावा 11 के आने के साथ, एक नया, अधिक सुविधाजनक मॉड्यूल java.net.http सामने आया। इस लेख में, हम जावा में HTTP क्लाइंट के साथ काम करने के सभी चरणों को समझेंगे: सरल GET अनुरोधों से लेकर JSON भेजने और त्रुटियों को संभालने तक।
यह लेख उन डेवलपर्स के लिए है जो पहले से ही जावा की मूल बातों से परिचित हैं, लेकिन नेटवर्क अनुरोधों के बारे में अपने ज्ञान को व्यवस्थित करना चाहते हैं। हम जावा 11+ से अंतर्निहित HttpClient का उपयोग करेंगे, क्योंकि यह आधुनिक और अनुशंसित दृष्टिकोण है।
1. HTTP क्लाइंट की मूल बातें: निर्माण और कॉन्फ़िगरेशन
\n\nअनुरोध भेजने से पहले, आपको HttpClient का एक इंस्टेंस बनाना होगा। यह केंद्रीय ऑब्जेक्ट है जिसके माध्यम से सभी HTTP ऑपरेशन निष्पादित किए जाते हैं। आइए बुनियादी कॉन्फ़िगरेशन देखें।
क्लाइंट बनाना
\n\nसबसे आसान तरीका स्टैटिक मेथड newHttpClient() का उपयोग करना है:
import java.net.http.HttpClient;\n\nHttpClient client = HttpClient.newHttpClient();\n\nहालांकि, वास्तविक प्रोजेक्ट्स के लिए अक्सर टाइमआउट, प्रोटोकॉल संस्करण या प्रॉक्सी सेट करने की आवश्यकता होती है। यहाँ एक विस्तारित कॉन्फ़िगरेशन का उदाहरण है:
\n\nimport java.net.http.HttpClient;\nimport java.time.Duration;\n\nHttpClient client = HttpClient.newBuilder()\n .version(HttpClient.Version.HTTP_2) // HTTP/2 का उपयोग करें\n .connectTimeout(Duration.ofSeconds(10)) // कनेक्शन टाइमआउट\n .followRedirects(HttpClient.Redirect.NORMAL) // रीडायरेक्ट का स्वचालित अनुसरण\n .build();\n\nमहत्वपूर्ण कॉन्फ़िगरेशन पैरामीटर
\n\n- \n
- version — HTTP/1.1 और HTTP/2 के बीच चयन (डिफ़ॉल्ट HTTP/2, यदि सर्वर समर्थन करता है) \n
- connectTimeout — कनेक्शन के लिए अधिकतम प्रतीक्षा समय \n
- followRedirects — रीडायरेक्ट को संभालने की नीति (NEVER, ALWAYS, NORMAL) \n
- proxy — प्रॉक्सी सर्वर कॉन्फ़िगरेशन (यदि आवश्यक हो) \n
ध्यान दें: HttpClient के एक इंस्टेंस का उपयोग कई अनुरोधों के लिए किया जा सकता है। यह थ्रेड-सेफ है, इसलिए इसे एक बार बनाया जा सकता है और पूरे एप्लिकेशन में पुन: उपयोग किया जा सकता है।
2. HTTP अनुरोध बनाना और भेजना
\n\nअब मुख्य भाग पर आते हैं - अनुरोध तैयार करना। जावा 11+ में इसके लिए क्लास HttpRequest का उपयोग किया जाता है। आइए मुख्य प्रकार के अनुरोधों को देखें।
GET अनुरोध: डेटा प्राप्त करना
\n\nGET सबसे सरल प्रकार का अनुरोध है। इसका उपयोग सर्वर से डेटा प्राप्त करने के लिए किया जाता है। उदाहरण:
\n\nimport java.net.URI;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\n\nHttpRequest request = HttpRequest.newBuilder()\n .uri(URI.create("https://api.example.com/users"))\n .GET() // स्पष्ट रूप से मेथड निर्दिष्ट करें (इसे छोड़ा जा सकता है, GET डिफ़ॉल्ट है)\n .build();\n\nHttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());\n\nSystem.out.println("स्थिति: " + response.statusCode());\nSystem.out.println("प्रतिक्रिया का मुख्य भाग: " + response.body());\n\nमेथड send() एक सिंक्रोनस अनुरोध निष्पादित करता है। यदि एसिंक्रोनस निष्पादन की आवश्यकता है, तो sendAsync() का उपयोग करें, जो CompletableFuture लौटाता है।
POST अनुरोध: डेटा भेजना
\n\nPOST का उपयोग सर्वर पर डेटा भेजने के लिए किया जाता है। अक्सर यह JSON या फॉर्म होता है। आइए दोनों विकल्पों पर विचार करें।
\n\nJSON के साथ POST:
\n\nimport java.net.http.HttpRequest.BodyPublishers;\n\nString json = "{\\"name\\":\\"इवान\\",\\"email\\":\\"iva