CodeGym/Java kursus/Modul 3/Tilføjelse af brødtekst til HttpRequest

Tilføjelse af brødtekst til HttpRequest

Ledig

3.1 Body Publishers

Jeg håber ikke, du har glemt, at der udover GET-anmodninger også er PUT- og POST-anmodninger , når du også skal tilføje til anmodningen request body, det vil sige anmodningslegemet.

HttpRequestKlassen har en særlig indre klasse til dette BodyPublisher. Selvom det teknisk set er en grænseflade, der har flere implementeringer, som vi vil diskutere nedenfor

Og vi starter med det enkleste - fraværet af et anmodningsorgan. Ja, det sker.

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

Enkelt og smukt.

3.2 ofString()

Den næstmest almindelige mulighed er at sende en streng som forespørgselstekst. Dette gøres meget enkelt:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "text/plain;charset=UTF-8")
   .POST(HttpRequest.BodyPublishers.ofString("Hello"))
   .build();

Forresten kan du indstille kodningen af ​​den transmitterede streng. Det kan være meget nyttigt, hvis http-serveren, som anmodningen sendes til, ikke virker på UTF8.

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
   .build();

3.3 af Fil()

Til sidst vil du måske vedhæfte en fil til POST-anmodningen . Sådan uploades dine avatarer normalt til serveren. For at gøre dette skal du kalde metoden ofFile(), hvor Pathden lokale fil skal overføres:

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()

Et andet almindeligt scenarie er at sende et sæt bytes til serveren. For eksempel har du serialiseret et objekt som et sæt bytes, krypteret noget eller bare vil sende en databuffer. Dette kræver en metode .ofByteArray().

Denne metode tager et array af bytes som en parameter. Eksempel:

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 afInputStream()

Endelig er det sidste, men ikke mindst interessante scenarie knyttet InputStreamtil en POST-anmodning .

Der er en speciel funktion til dette ofInputStream(). Og hun er meget klog. Det giver dig mulighed for at organisere overførslen af ​​data fra strøm til strøm, vedhæfte en datastrøm til en POS-anmodning , der ikke engang er åben endnu.

Du skal videregive en funktion til funktionen ofInputStream(), som vil returnere en stream som et resultat InputStream.

Eksempel:

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();

Jeg gad ikke indhegne haven her, men jeg tror du forstår princippet. Hvorfor gjorde de det? Du kan næsten altid bruge ofByteArray(). Men hvis du vil sende data asynkront, eller du skal implementere et særligt komplekst scenarie, kan du bruge denne metode.

Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu