3.1 Badan Penerbit
Saya harap anda tidak lupa bahawa sebagai tambahan kepada permintaan GET , terdapat juga permintaan PUT dan POST , apabila anda juga perlu menambah permintaan , iaitu badan permintaan.request body
HttpRequest
Kelas mempunyai kelas dalaman khas untuk ini BodyPublisher
. Walaupun secara teknikal ia adalah antara muka yang mempunyai pelbagai pelaksanaan, yang akan kita bincangkan di bawah
Dan kita akan mulakan dengan yang paling mudah - ketiadaan badan permintaan. Ya, ia berlaku.
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.POST(HttpRequest.BodyPublishers.noBody())
.build();
Simple dan cantik.
3.2 daripadaString()
Pilihan kedua yang paling biasa ialah menghantar beberapa rentetan sebagai badan permintaan. Ini dilakukan dengan sangat mudah:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("Content-Type", "text/plain;charset=UTF-8")
.POST(HttpRequest.BodyPublishers.ofString("Hello"))
.build();
Dengan cara ini, anda boleh menetapkan pengekodan rentetan yang dihantar. Ia boleh menjadi sangat berguna jika pelayan http yang permintaannya dihantar tidak berfungsi pada UTF8.
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
.build();
3.3 ofFile()
Akhir sekali, anda mungkin mahu melampirkan fail pada permintaan POST . Beginilah cara avatar anda biasanya dimuat naik ke pelayan. Untuk melakukan ini, anda perlu memanggil kaedah ofFile()
, di mana untuk memindahkan Path
fail tempatan:
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 ofByteArray()
Satu lagi senario biasa ialah menghantar satu set bait ke pelayan. Contohnya, anda mensiri beberapa objek sebagai satu set bait, menyulitkan sesuatu atau hanya mahu menghantar beberapa penimbal data. Ini memerlukan kaedah .ofByteArray()
.
Kaedah ini mengambil tatasusunan bait 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 daripadaInputStream()
Akhir sekali, senario terakhir tetapi tidak kurang menarik ialah melampirkan InputStream
permintaan POST .
Terdapat fungsi khas untuk ini ofInputStream()
. Dan dia sangat bijak. Ia membolehkan anda mengatur pemindahan data dari aliran ke aliran, melampirkan aliran data ke permintaan POS yang belum dibuka lagi.
Anda perlu menghantar fungsi kepada 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 bersusah payah untuk memagar taman di sini, tetapi saya fikir anda memahami prinsipnya. Mengapa mereka berbuat demikian? Anda hampir selalu boleh menggunakan ofByteArray()
. Tetapi jika anda ingin menghantar data secara tidak segerak atau anda perlu melaksanakan beberapa senario yang sangat kompleks, maka anda boleh menggunakan kaedah ini.
GO TO FULL VERSION