kaedah newBuilder(), build()

Kelas HttpRequest digunakan untuk menerangkan permintaan http, yang mudah difahami dari namanya. Objek ini tidak melakukan apa-apa dengan sendirinya, ia hanya mengandungi pelbagai maklumat tentang permintaan http. Oleh itu, seperti yang anda mungkin sudah meneka, templat Builder juga digunakan untuk menciptanya.

HttpRequest request = HttpRequest.newBuilder()
	.method1()
	.method2()
	.methodN()
    .build();

Di mana antara panggilan ke kaedah newBuilder() dan build() anda perlu memanggil semua kaedah untuk membina objekHttpRequest.

Contoh permintaan mudah kelihatan seperti ini:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(“http://codegym.cc”))
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

Anda boleh menemui semua kaedah kelas HttpRequest pada pautan dalam dokumentasi rasmi .

Dan kemudian kami akan menganalisis yang paling popular daripada mereka.

kaedah uri().

Menggunakan kaedah uri() , anda boleh menetapkan URI (atau URL) yang permintaan http akan dihantar. Contoh:

HttpRequest request = HttpRequest.newBuilder()
    .uri( URI.create(“http://codegym.cc”) )
    .build();

Dengan cara ini, anda boleh membuat kod ini lebih pendek sedikit dengan menghantar URI terus ke kaedah newBuilder() :

HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();

Penting! URI boleh dibuat dalam dua cara:

  • newURI(String)
  • URI.create(String)

Cara kedua adalah lebih baik. Cara pertama, malangnya, tidak begitu baik, kerana pembina URI diisytiharkan sebagai URI awam(String str) membuang URISyntaxException , dan URIsyntaxException ialah pengecualian yang diperiksa.

Kaedah GET(), POST(), PUT(), DELETE()

Anda boleh menetapkan kaedah permintaan http menggunakan kaedah berikut:

  • DAPATKAN()
  • POST()
  • LETAK()
  • PADAM()

Begini rupa permintaan GET yang mudah:

HttpRequest request = HttpRequest.newBuilder()
  .uri(new URI("https://codegym.cc"))
  .GET()
  .build();

versi() kaedah

Anda juga boleh menetapkan versi protokol HTTP. Hanya ada 2 pilihan:

  • HttpClient.Version.HTTP_1_1
  • HttpClient.Version.HTTP_2

Katakan anda ingin membuat permintaan menggunakan protokol HTTP/2, maka anda perlu menulis:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .version( HttpClient.Version.HTTP_2 )
   .GET()
   .build();

Sangat mudah, bukan? :)

kaedah tamat masa ().

Anda juga boleh menetapkan masa pelaksanaan pertanyaan. Jika ia lulus dan permintaan tidak pernah selesai, HttpTimeoutException akan dibuang .

Masa itu sendiri ditetapkan menggunakan objektempoh masadaripada Java DateTime API. Contoh:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .timeout( Duration.of(5, SECONDS) )
   .GET()
   .build();

Kehadiran kaedah ini menunjukkan bahawa kelas HttpClient dan HttpRequest boleh melakukan pelbagai tugas. Bayangkan anda sedang melaksanakan permintaan, dan sesuatu telah berlaku pada rangkaian dan ia berlangsung selama 30 saat. Adalah lebih berguna untuk segera menerima pengecualian dan bertindak balas terhadapnya dengan betul.

kaedah header().

Anda juga boleh menambah sebarang bilangan pengepala pada sebarang permintaan. Dan ia semudah melakukan apa-apa lagi. Terdapat kaedah khas untuk ini - header() . Contoh:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .header("name1", "value1")
   .header("name2", "value2")
   .GET()
   .build();

Terdapat satu lagi cara alternatif untuk menetapkan banyak pengepala sekaligus. Ia mungkin berguna jika, sebagai contoh, anda menukar senarai pengepala kepada tatasusunan:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("name1", "value1", "name2", "value2")
   .GET()
   .build();

Semua perkara asas adalah mudah.