java.net.http.HttpClient
Send synkrone forespørsler
java.net.http.HttpClient er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.
Den moderne HTTP-klienten
Siden Java 11 leverer JDK-et en moderne HTTP-klient i pakken java.net.http. Den erstatter den gamle HttpURLConnection med et rent, flytende API som støtter HTTP/1.1 og HTTP/2.
De tre sentrale typene er:
- HttpClient — sender forespørsler og håndterer konfigurasjon (tidsavbrudd, proxyer og omdirigeringer).
- HttpRequest — en uforanderlig beskrivelse av det som skal sendes.
- HttpResponse — resultatet, inkludert status, headere og innhold.
Opprette en HttpClient
De bygger en klient med den statiske metoden newBuilder(). Én klient kan brukes på nytt for mange forespørsler, og den er trådsikker.
Her konfigurerer vi HTTP/2 og et tidsavbrudd for tilkoblingen. newHttpClient() er også tilgjengelig for en rask standardinstans.
import java.net.http.HttpClient;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(10))
.build();
System.out.println("Client version: " + client.version());
}
}Bygge en forespørsel
HttpRequest er uforanderlig og bygges med en flytende builder. Som et minimum oppgir De en URI; som standard utfører den en GET.
En streng konverteres til en URI med URI.create(...).
import java.net.URI;
import java.net.http.HttpRequest;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/data"))
.GET()
.build();
System.out.println("Method: " + request.method());
System.out.println("URI: " + request.uri());
}
}Sende synkront
Metoden send blokkerer tråden som kaller den, til responsen kommer. Den trenger en BodyHandler som forteller klienten hvordan responsinnholdet skal tolkes.
BodyHandlers.ofString() leser innholdet inn i en String.
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode());
}
}Lese statuskoden
Responsen eksponerer statusCode() som en int. Koder i 2xx-området betyr suksess, 3xx er omdirigeringer, 4xx er klientfeil og 5xx er serverfeil.
Merk: HTTP-klienten kaster aldri et unntak for en 4xx-/5xx-respons – De må selv kontrollere koden.
public class Main {
public static void main(String[] args) {
int status = 404;
String label;
if (status >= 200 && status < 300) label = "Success";
else if (status >= 300 && status < 400) label = "Redirect";
else if (status >= 400 && status < 500) label = "Client error";
else label = "Server error";
System.out.println(status + " -> " + label);
}
}Lese innholdet
Med BodyHandlers.ofString() returnerer response.body() en String. Det finnes andre handlere for byte-data, filer og strømmer (som gjennomgås senere).
Dette kodeutdraget simulerer innholdet De ville mottatt.
public class Main {
public static void main(String[] args) {
String body = "{\"message\":\"hello\"}";
System.out.println("Body length: " + body.length());
System.out.println("Body: " + body);
}
}Håndtere omdirigeringer
Som standard følger klienten ikke omdirigeringer. Dette konfigureres på builderen med followRedirects(...).
Alternativene i HttpClient.Redirect er NEVER, ALWAYS og NORMAL (følger omdirigeringer, bortsett fra nedgraderinger fra HTTPS til HTTP).
import java.net.http.HttpClient;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
System.out.println("Redirect policy: " + client.followRedirects());
}
}Tidsavbrudd for hver forespørsel
Tilkoblingstidsavbruddet ligger på klienten. Et forespørselstidsavbrudd (hvor lenge det skal ventes på en respons) ligger på forespørselen via timeout(...).
Hvis tidsavbruddet utløper, kaster send et HttpTimeoutException.
import java.net.URI;
import java.net.http.HttpRequest;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.timeout(Duration.ofSeconds(5))
.build();
System.out.println("Timeout set: " + request.timeout().isPresent());
}
}Undersøke responsheadere
Responsen inneholder et HttpHeaders-objekt som er tilgjengelig via headers(). Oppslag i headere skiller ikke mellom store og små bokstaver og kan returnere flere verdier, så firstValue(...) returnerer en Optional<String>.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// Simulating a header lookup result
Optional<String> contentType = Optional.of("application/json");
System.out.println("Content-Type: " + contentType.orElse("unknown"));
}
}Kontrollerte unntak
Den synkrone send-metoden deklarerer to kontrollerte unntak:
- IOException — nettverks- eller protokollfeil.
- InterruptedException — den blokkerte tråden ble avbrutt.
De må enten fange eller deklarere begge. Asynkrone kall (i neste leksjon) unngår dette ved å returnere en future.
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// client.send(...) would go here
throw new IOException("connection refused");
} catch (IOException e) {
System.out.println("Network problem: " + e.getMessage());
}
}
}En klient som kan gjenbrukes
Beste praksis er å opprette én HttpClient og gjenbruke den i hele applikasjonen. Den bruker en tilkoblingspool og er fullstendig trådsikker.
Å opprette en ny klient for hver forespørsel sløser med ressurser og undergraver HTTP/2-multipleksing.
import java.net.http.HttpClient;
public class Main {
private static final HttpClient SHARED = HttpClient.newHttpClient();
public static void main(String[] args) {
System.out.println("Shared client ready: " + (SHARED != null));
}
}Kunnskapssjekk
Test forståelsen Deres av den synkrone HTTP-klienten.
Oppsummering
De har lært det grunnleggende om JDK HTTP-klienten:
- HttpClient.newBuilder() konfigurerer versjon, tidsavbrudd og omdirigeringer; gjenbruk én instans.
- HttpRequest.newBuilder().uri(...).GET() bygger en uforanderlig forespørsel.
- client.send(request, BodyHandlers.ofString()) blokkerer og returnerer en
HttpResponse<String>. - Les resultatene med
statusCode(),body()ogheaders(). - Ikke-2xx-koder kaster ikke unntak – kontroller dem selv.
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 104
- Leksjoner
- 374
Ofte stilte spørsmål
Er leksjonen «java.net.http.HttpClient» gratis?
Ja – hele teksten i «java.net.http.HttpClient» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «java.net.http.HttpClient»?
Send synkrone forespørsler Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Java Academy?
Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «java.net.http.HttpClient»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?
Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- java.net.http.HttpClient
- Asynkrone forespørsler
- Forespørselsdata og headere
- Håndtere svar