Java पर HTTP क्लाइंट: अनुरोधों के साथ काम करने की उन्नत तकनीकें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java पर HTTP क्लाइंट: अनुरोध सही तरीके से करें (उन्नत स्तर)

\n\n

HTTP-अनुरोधों के साथ काम करना आधुनिक Java-डेवलपमेंट में बुनियादी कार्यों में से एक है। हालांकि, ऐसा कोड लिखना जो केवल अनुरोध भेजता नहीं है, बल्कि इसे विश्वसनीय रूप से, त्रुटियों, टाइमआउट और संसाधन प्रबंधन के सही संचालन के साथ करता है, के लिए गहरी समझ की आवश्यकता होती है। इस लेख में, हम सरल HttpURLConnection से आगे बढ़ेंगे और Java पर HTTP-क्लाइंट के साथ काम करने की उन्नत तकनीकों पर चर्चा करेंगे, जिसमें बिल्ट-इन java.net.http.HttpClient (Java 11+) और लोकप्रिय लाइब्रेरी OkHttp का उपयोग किया जाएगा।

\n\n

1. टाइमआउट का प्रबंधन: अपने एप्लिकेशन को हैंग होने से बचाएं

\n\n

HTTP के साथ काम करते समय सबसे आम समस्याओं में से एक धीमे या अनुपलब्ध सर्वर के कारण एप्लिकेशन का हैंग होना है। टाइमआउट का सही कॉन्फ़िगरेशन एक दोष-सहिष्णु क्लाइंट बनाने की दिशा में पहला कदम है।

\n\n

टाइमआउट के प्रकार:

\n
    \n
  • Connect Timeout: सर्वर के साथ TCP कनेक्शन स्थापित करने की प्रतीक्षा का समय।
  • \n
  • Read Timeout (Socket Timeout): कनेक्शन स्थापित होने के बाद सर्वर से डेटा की प्रतीक्षा का समय।
  • \n
  • Write Timeout: सर्वर पर डेटा भेजने की प्रतीक्षा का समय (POST/PUT के लिए प्रासंगिक)।
  • \n
  • Request Timeout: पूरे HTTP अनुरोध (कनेक्शन, भेजना और प्रतिक्रिया प्राप्त करना शामिल) के निष्पादन का कुल समय।
  • \n
\n\n

java.net.http.HttpClient के लिए कॉन्फ़िगरेशन उदाहरण:

\n
import java.net.http.HttpClient;\nimport java.time.Duration;\n\npublic class TimeoutExample {\n    public static HttpClient createClientWithTimeouts() {\n        return HttpClient.newBuilder()\n                .connectTimeout(Duration.ofSeconds(5))  // कनेक्शन के लिए टाइमआउट\n                .build();\n    }\n\n    public static void main(String[] args) {\n        HttpClient client = createClientWithTimeouts();\n        // Read/Write टाइमआउट के लिए HttpRequest का उपयोग करें\n        var request = java.net.http.HttpRequest.newBuilder()\n                .uri(java.net.URI.create("https://api.example.com/data"))\n                .timeout(Duration.ofSeconds(10))  // अनुरोध पर कुल टाइमआउट\n                .GET()\n                .build();\n        System.out.println("टाइमआउट वाला क्लाइंट बनाया गया: " + client);\n    }\n}\n
\n\n

OkHttp के लिए कॉन्फ़िगरेशन उदाहरण:

\n
import okhttp3.OkHttpClient;\nimport java.util.concurrent.TimeUnit;\n\npublic class OkHttpTimeoutExample {\n    public static OkHttpClient createOkHttpClient() {\n        return new OkHttpClient.Builder()\n                .connectTimeout(5, TimeUnit.SECONDS)\n                .readTimeout(10, TimeUnit.SECONDS)\n                .writeTimeout(10, TimeUnit.SECONDS)\n                .callTimeout(30, TimeUnit.SECONDS) // पूरे कॉल पर कुल टाइमआउट\n                .build();\n    }\n\n    public static void main(String[] args) {\n        OkHttpClient client = createOkHttpClient();\n        System.out.println("टाइमआउट वाला OkHttp क्लाइंट काम करने के लिए तैयार है।");\n    }\n}\n
\n\n

2. कनेक्शन पूल और पुन: उपयोग: संसाधन बचाएं

\n\n

प्रत्येक नए HTTP कनेक्शन के लिए TCP हैंडशेक और संभवतः TLS हैंडशेक स्थापित करने की लागत आती है। उन एप्लिकेशन के लिए जो एक ही सर्वर पर कई अनुरोध करते हैं, कनेक्शन पूल (connection pool) का उपयोग करना महत्वपूर्ण है। यह मौजूदा कनेक्शनों को पुन: उपयोग करने की अनुमति देता है, जिससे अनुरोध काफी तेज हो जाते हैं और नेटवर्क पर लोड कम हो जाता है।

\n\n

java.net.http.HttpClient में एक बिल्ट-इन कनेक्शन पूल है जो स्वचालित रूप से प्रबंधित होता है। हालांकि, आप इसका आकार कॉन्फ़िगर कर सकते हैं:

\n
import java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.net.URI;\nimport java.time.Duration;\n\npublic class PoolExample {\n    public static void main(String[] args) throws Exception {\n        // HttpClient स्वयं पूल का प्रबंधन करता है, लेकिन हम सीमित कर सकते हैं                

ब्लॉग

पुस्तक अनुशंसाएँ