1.1 एचटीपी क्लाइंट का परिचय
JDK 11 के साथ शुरुआत करते हुए, जावा प्लेटफॉर्म के डेवलपर्स ने http अनुरोध करने के लिए JDK में एक शक्तिशाली नया टूल जोड़ा, java.net.http
. इसमें चार प्रमुख वर्ग शामिल हैं:
- एचटीपी क्लाइंट
- एचटीटीपी अनुरोध
- एचटीटीपी रिस्पांस
- वेब सॉकेट
HTTP
ये बहुत शक्तिशाली वर्ग हैं जो आपको , HTTP/2
और प्रोटोकॉल का उपयोग करके सभी प्रकार के अनुरोधों को करने की अनुमति देते हैं WebSocket
।
इसके अलावा, आप इन कक्षाओं का उपयोग सिंक्रोनस और एसिंक्रोनस दोनों http अनुरोध करने के लिए कर सकते हैं।
एचटीटीपी अनुरोध करने में निम्नलिखित भाग होते हैं:
- एक वस्तु बनाएँ
HttpClient
- एक वस्तु बनाएँ
HttpRequest
send()
या विधि का उपयोग करके अनुरोध भेजनाsendAsync()
- प्रतिक्रिया प्रसंस्करण
HttpResponse
ऐसे अनुरोध का एक उदाहरण:
HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
1.2 घोषणात्मक दृष्टिकोण
उपरोक्त उदाहरण में, आप कोड लिखने के तथाकथित घोषणात्मक दृष्टिकोण का एक उदाहरण देखते हैं। आइए उदाहरण के पहले भाग पर एक नज़र डालें:
HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();
क्लासिक शैली में लिखा हुआ यह कोड कैसा दिखेगा:
HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setProxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)));
client.setAuthenticator(Authenticator.getDefault());
कोड में घोषणात्मक दृष्टिकोण का उपयोग करते समय, दो चीजें बदल जाती हैं। सबसे पहले , सभी क्लास मेथड्स HttpClient
अपना ऑब्जेक्ट रिटर्न करते हैं , जो आपको कोड को चेन के रूप में व्यवस्थित करने की अनुमति देता है।
क्लासिक कोड: |
---|
|
एक श्रृंखला के रूप में: |
|
हम प्रत्येक विधि को एक अलग पंक्ति में स्थानांतरित करते हैं (यह एक लंबा कथन है) |
|
दूसरे , उपसर्ग को विधियों से हटा दिया जाता है set
, जो आपको कोड को और भी अधिक कॉम्पैक्ट रूप से लिखने की अनुमति देता है:
था |
---|
|
ये बन गया |
|
इस तरह के कोड को पढ़ना आसान होता है, हालांकि लिखना कठिन होता है।
और एक और महत्वपूर्ण बात। इस उदाहरण में, बिल्डर पैटर्न का उपयोग किया गया था। ऐसे परिदृश्य हैं जहां ऑब्जेक्ट बनाना एक जटिल प्रक्रिया है। इसलिए, वे इसे औपचारिक बनाना पसंद करते हैं: यह एक सशर्त विधि कॉल से शुरू होता है begin()
और एक सशर्त विधि कॉल के साथ समाप्त होता है end()
।
हमारे द्वारा विश्लेषण किए गए उदाहरण में, विधि HttpClient.newBuilder()
एक वस्तु लौटाती है HttpClient.Builder
(यह वर्ग की आंतरिक उपयोगिता वर्ग है HttpClient
)। प्रकार के सभी तरीकों को version()
इस सेवा वस्तु पर ही बुलाया जाता है। ठीक है, विधि की कॉल build()
वस्तु के निर्माण के अंत को चिह्नित करती है और वस्तु को वापस करती है HttpClient
।
GO TO FULL VERSION