नवीन HttpClient

उपलब्ध

1.1 HttpClient चा परिचय

JDK 11 पासून सुरुवात करून, Java प्लॅटफॉर्मच्या विकसकांनी HTTP विनंत्या करण्यासाठी JDK मध्ये एक शक्तिशाली नवीन साधन जोडले, java.net.http. यात चार मुख्य वर्ग आहेत:

  • HttpClient
  • Http विनंती
  • Http प्रतिसाद
  • वेब सॉकेट

HTTPहे अतिशय शक्तिशाली वर्ग आहेत जे तुम्हाला , HTTP/2आणि वापरून सर्व संभाव्य प्रकारच्या विनंत्या करू देतात WebSocket.

या व्यतिरिक्त, तुम्ही हे वर्ग समकालिक आणि असिंक्रोनस HTTP विनंत्या करण्यासाठी वापरू शकता.

HTTP विनंती करण्यामध्ये खालील भाग असतात:

  1. एक ऑब्जेक्ट तयार कराHttpClient
  2. एक ऑब्जेक्ट तयार कराHttpRequest
  3. send()किंवा पद्धत वापरून विनंती पाठवत आहेsendAsync()
  4. प्रतिसाद प्रक्रिया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 त्यांचे स्वतःचे ऑब्जेक्ट परत करतात , जे तुम्हाला साखळीच्या स्वरूपात कोड व्यवस्थापित करण्यास अनुमती देतात.

क्लासिक कोड:
HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setAuthenticator(Authenticator.getDefault());
साखळी म्हणून:
HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
आम्ही प्रत्येक पद्धत वेगळ्या ओळीवर हस्तांतरित करतो (हे एक लांब विधान आहे)
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

दुसरे म्हणजे , उपसर्ग पद्धतींमधून काढला गेला आहे set, जो आपल्याला कोड अधिक संक्षिप्तपणे लिहिण्याची परवानगी देतो:

होते
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());
तो बनला
HttpClient client = HttpClient.new()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.authenticator(Authenticator.getDefault());

असे कोड वाचणे सोपे आहे, जरी लिहिणे कठीण आहे.

आणि आणखी एक महत्त्वाचा मुद्दा. या उदाहरणात, बिल्डर पॅटर्न वापरला होता. अशी परिस्थिती आहे जिथे ऑब्जेक्ट तयार करणे ही एक जटिल प्रक्रिया आहे. म्हणून, ते त्यास औपचारिक करणे पसंत करतात: ते सशर्त पद्धत कॉलने सुरू होते begin()आणि सशर्त पद्धत कॉलने समाप्त होते end().

आम्ही विश्लेषण केलेल्या उदाहरणामध्ये, पद्धत HttpClient.newBuilder()ऑब्जेक्ट परत करते HttpClient.Builder(हा वर्गाचा अंतर्गत उपयोगिता वर्ग आहे HttpClient). version()या सेवा ऑब्जेक्टवर प्रकारच्या सर्व पद्धती कॉल केल्या जातात. बरं, पद्धतीचा कॉल build()ऑब्जेक्टच्या बांधकामाचा शेवट चिन्हांकित करतो आणि ऑब्जेक्ट परत करतो HttpClient.

टिप्पण्या
  • लोकप्रिय
  • नवीन
  • जुने
टिप्पणी करण्यासाठी तुम्ही साईन इन केलेले असणे आवश्यक आहे
या पानावर अजून कोणत्याही टिप्पण्या नाहीत