newBuilder(), build() metodlari
HttpRequеst klassi http-requestni tasvirlash uchun ishlatiladi, bu uning nomidan ham tushunarli. Ushbu obyekt o'zi hech narsa qilmaydi, lekin http-so'rov haqida turli xil ma'lumotlarni o'z ichiga oladi. Shuning uchun, sen allaqachon taxmin qilganingdek, uni yaratish uchun ham Builder shablonidan foydalaniladi.
HttpRequest request = HttpRequest.newBuilder() .method1() .method2() .methodN() .build();
Qaerda newBuilder() va build() metodlari orasida, HttpRequest obyektini yaratish uchun barcha metodlarni chaqirish kerak.
Eng oddiy so'rov quyidagi ko'rinishda bo'ladi:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(“http://javarush.com”))
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
HttpRequest klassining barcha metodlarini rasmiy hujjatlarda topishingiz mumkin.
Keyinchalik biz ularning eng ommaboplarini ko'rib chiqamiz.
uri() metodi
uri() metodi orqali http-so'rov yuboriladigan URI (yoki URL) ni belgilash mumkin. Misol:
HttpRequest request = HttpRequest.newBuilder()
.uri( URI.create(“http://javarush.com”) )
.build();
Aytgancha, ushbu kodni biroz qisqaroq yozish mumkin, URI ni to'g'ridan-to'g'ri newBuilder() metodiga uzatish orqali:
HttpRequest request = HttpRequest.newBuilder( URI.create(“http://javarush.com”) ).build();
Muhim! URI ni ikki usulda yaratish mumkin:
- new URI(String)
- URI.create(String)
Ikkinchi usul afzalroq. Birinchi usul, afsuski, yaxshi emas, chunki URI konstruktori quyidagicha e'lon qilingan public URI(String str) throws URISyntaxException, va URISyntaxException — bu checked-istisno.
GET(), POST(), PUT(), DELETE() metodlari
Http-so'rov metodini quyidagi metodlar orqali belgilash mumkin:
- GET()
- POST()
- PUT()
- DELETE()
Oddiy GET-so'rov quyidagicha ko'rinishda bo'ladi:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://javarush.com"))
.GET()
.build();
version() metodi
HTTP-protokol versiyasini ham belgilash mumkin. Ularning faqat 2 variant mavjud:
- HttpClient.Version.HTTP_1_1
- HttpClient.Version.HTTP_2
Faraz qilaylik, sen HTTP/2 protokoli bo'yicha so'rov yaratmoqchisan, unda sen quyidagini yozishing kerak bo'ladi:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://javarush.com"))
.version( HttpClient.Version.HTTP_2 )
.GET()
.build();
Juda sodda, to'g'rimi? :)
timeout() metodi
So'rovning bajarilishi vaqti ham belgilanishi mumkin. Agar u o'tib ketsa va so'rov bajarilmasa, HttpTimeoutException tashlanadi.
Vaqtning o'zi Java DateTime API dan Duration obyekti yordamida belgilanadi. Misol:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://javarush.com"))
.timeout( Duration.of(5, SECONDS) )
.GET()
.build();
Ushbu metodning mavjudligi HttpClient va HttpRequest klasslarining juda turli-tuman vazifalarni hal qilish qobiliyatini ko'rsatadi. Tasavvur qiling, siz so'rovni bajarayapsiz, lekin tarmoqda nimadir yuz berdi va u 30 soniya davom etdi. To'g'ri, darhol istisno olish va unga to'g'ri javob berish foydaliroq bo'ladi.
header() metodi
Har qanday so'rovga cheksiz sonli headerlar qo'shilishi mumkin. Va buni hamma narsalar kabi sodda qilish imkoniyati bor. Buning uchun maxsus metod — header() mavjud. Misol:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://javarush.com"))
.header("name1", "value1")
.header("name2", "value2")
.GET()
.build();
Bir nechta headerlarni bir vaqtning o'zida belgilash uchun yana bir alternativ usul mavjud. Bu, agar sen, masalan, headerlar ro'yxatini massivga aylantirgan bo'lsang, foydali bo'lishi mumkin:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://javarush.com"))
.headers("name1", "value1", "name2", "value2")
.GET()
.build();
Hammasi elementar oddiy.
GO TO FULL VERSION