3.1 Badan Penerbit
Saya harap Anda tidak lupa bahwa selain permintaan GET , ada juga permintaan PUT dan POST , ketika Anda juga perlu menambahkan permintaan , yaitu badan permintaan.request body
HttpRequest
Kelas memiliki kelas dalam khusus untuk ini BodyPublisher
. Meskipun secara teknis ini adalah antarmuka yang memiliki banyak implementasi, yang akan kita bahas di bawah ini
Dan kita akan mulai dengan yang paling sederhana - tidak adanya badan permintaan. Ya, itu terjadi.
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.POST(HttpRequest.BodyPublishers.noBody())
.build();
Sederhana dan indah.
3.2 dariString()
Opsi paling umum kedua adalah meneruskan beberapa string sebagai badan permintaan. Ini dilakukan dengan sangat sederhana:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "text/plain;charset=UTF-8")
.POST(HttpRequest.BodyPublishers.ofString("Hello"))
.build();
Omong-omong, Anda dapat mengatur pengkodean string yang dikirimkan. Ini bisa sangat berguna jika server http tujuan pengiriman permintaan tidak berfungsi di UTF8.
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
.build();
3.3 dari File()
Terakhir, Anda mungkin ingin melampirkan file ke permintaan POST . Beginilah biasanya avatar Anda diunggah ke server. Untuk melakukan ini, Anda perlu memanggil metode ofFile()
, tempat mentransfer Path
file lokal:
Path avatar = Path.of("c://avatar.jpeg");
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "image/jpeg")
.POST(HttpRequest.BodyPublishers.ofFile(avatar))
.build();
3.4 dariByteArray()
Skenario umum lainnya adalah mengirim satu set byte ke server. Misalnya, Anda membuat serial beberapa objek sebagai sekumpulan byte, mengenkripsi sesuatu, atau hanya ingin mengirim beberapa buffer data. Ini membutuhkan metode .ofByteArray()
.
Metode ini mengambil array byte sebagai parameter. Contoh:
byte[] data = "My Secret Message".getBytes();
byte[] dataEncripted = SuperEncriptor.encript(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "application/octet-stream")
.POST(HttpRequest.BodyPublishers.ofByteArray(dataEncripted))
.build();
3.5 dariInputStream()
Terakhir, skenario yang terakhir namun tidak kalah menarik adalah melampirkan InputStream
ke permintaan POST .
Ada fungsi khusus untuk ini ofInputStream()
. Dan dia sangat cerdas. Ini memungkinkan Anda untuk mengatur transfer data dari aliran ke aliran, melampirkan aliran data ke permintaan POS yang bahkan belum dibuka.
Anda harus meneruskan fungsi ke fungsi tersebut ofInputStream()
, yang akan mengembalikan aliran sebagai hasilnya InputStream
.
Contoh:
byte[] data = "My Secret Message".getBytes();
//wrapping an array of bytes into a stream.
InputStream is = new ByteArrayInputStream(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "application/octet-stream")
.POST(HttpRequest.BodyPublishers.ofInputStream (() -> is;))
.build();
Saya tidak repot-repot memagari taman di sini, tapi saya pikir Anda mengerti prinsipnya. Mengapa mereka melakukan itu? Anda hampir selalu dapat menggunakan ofByteArray()
. Tetapi jika Anda ingin mengirim data secara asinkron atau Anda perlu mengimplementasikan beberapa skenario yang sangat rumit, Anda dapat menggunakan metode ini.
GO TO FULL VERSION