Treści żądań i nagłówki
Wysyłanie danych POST i ustawianie nagłówków
Treści żądań i nagłówki to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Treści żądań i nagłówki
Żądania GET rzadko wymagają treści, ale żądania POST, PUT i PATCH już tak. Klient HTTP z JDK używa obiektów BodyPublisher do dostarczania treści żądań oraz metod buildera do ustawiania nagłówków.
W tej lekcji omówiono wysyłanie danych i kontrolowanie nagłówków, takich jak Content-Type.
BodyPublishers.ofString
Najprostszy publisher wysyła treść w postaci łańcucha znaków. Należy przekazać go do metody POST(...) buildera żądania.
BodyPublishers.noBody() służy do żądań bez treści.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"Ada\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/users"))
.POST(BodyPublishers.ofString(json))
.build();
System.out.println("Method: " + request.method());
}
}Ustawianie pojedynczego nagłówka
Metoda header(name, value) służy do dodania jednego nagłówka. Przy wysyłaniu JSON-u niemal zawsze należy ustawić Content-Type.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/users"))
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString("{}"))
.build();
System.out.println("Has Content-Type: " +
request.headers().firstValue("Content-Type").isPresent());
}
}Ustawianie wielu nagłówków naraz
headers(name1, value1, name2, value2, ...) ustawia kilka nagłówków w jednym wywołaniu. Liczba argumentów musi być parzysta, w przeciwnym razie zostanie zgłoszony wyjątek IllegalArgumentException.
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"))
.headers(
"Accept", "application/json",
"Accept-Language", "en-US")
.GET()
.build();
System.out.println(request.headers().map().keySet());
}
}Nagłówki autoryzacji
Tokeny Bearer są wysyłane w nagłówku Authorization. Wartość należy zbudować jako łańcuch znaków; nie wolno nigdy zapisywać w logach surowego tokenu.
public class Main {
public static void main(String[] args) {
String token = "abc123";
String headerValue = "Bearer " + token;
System.out.println("Authorization: Bearer ***");
System.out.println("Length: " + headerValue.length());
}
}PUT i DELETE
Builder udostępnia dedykowane metody: PUT(publisher), DELETE() oraz ogólną metodę method(name, publisher) do obsługi innych metod, takich jak PATCH.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
public class Main {
public static void main(String[] args) {
HttpRequest patch = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/users/1"))
.method("PATCH", BodyPublishers.ofString("{\"active\":true}"))
.build();
System.out.println("Method: " + patch.method());
}
}Treści formularzy kodowane w URL
W przypadku danych application/x-www-form-urlencoded należy ręcznie zbudować łańcuch treści, kodując każdą wartość w formacie URL, a następnie opublikować go jako łańcuch znaków.
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String body = "name=" + URLEncoder.encode("Ada Lovelace", StandardCharsets.UTF_8)
+ "&role=" + URLEncoder.encode("engineer", StandardCharsets.UTF_8);
System.out.println(body);
}
}Wysyłanie treści z pliku
BodyPublishers.ofFile(path) strumieniuje plik jako treść żądania bez wczytywania go w całości do pamięci — jest to idealne rozwiązanie podczas przesyłania plików.
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/upload"))
.header("Content-Type", "application/octet-stream")
.POST(BodyPublishers.ofFile(Path.of("data.bin")))
.build();
System.out.println("Upload request built");
}
}Treści w tablicy bajtów
Jeśli bajty są już dostępne w pamięci, BodyPublishers.ofByteArray(byte[]) wysyła je bezpośrednio. Jest to przydatne w przypadku binarnych danych tworzonych w czasie działania programu.
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
byte[] payload = "raw-bytes".getBytes(StandardCharsets.UTF_8);
// BodyPublishers.ofByteArray(payload) would wrap these bytes
System.out.println("Payload size: " + payload.length + " bytes");
}
}Ograniczone nagłówki
Ze względów bezpieczeństwa klient uniemożliwia ustawianie niektórych nagłówków, takich jak Host, Content-Length, Connection i Upgrade. Próba ich ustawienia powoduje zgłoszenie wyjątku IllegalArgumentException — klient zarządza nimi samodzielnie.
Połączenie elementów
Typowe żądanie POST z JSON-em łączy publisher treści i nagłówek typu treści:
.POST(BodyPublishers.ofString(json)).header("Content-Type", "application/json")- W razie potrzeby należy dodać
.header("Authorization", "Bearer ...")
Szybki test
Proszę sprawdzić zrozumienie zasad działania treści żądań i nagłówków.
Podsumowanie
Opanowano wysyłanie danych i kontrolowanie nagłówków:
- BodyPublishers.ofString / ofByteArray / ofFile dostarczają treści żądań.
- POST / PUT / DELETE / method(...) służą do wyboru metody HTTP.
- header(...) i headers(...) ustawiają nagłówki żądania.
- Dla JSON-u i danych formularza należy ustawić
Content-Type, a do tokenów używaćAuthorization. - Niektóre nagłówki (Host, Content-Length) są ograniczone i zarządzane przez klienta.
Często zadawane pytania
Czy lekcja „Treści żądań i nagłówki” jest bezpłatna?
Tak — pełny tekst „Treści żądań i nagłówki” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Treści żądań i nagłówki”?
Wysyłanie danych POST i ustawianie nagłówków Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Treści żądań i nagłówki”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- java.net.http.HttpClient
- Żądania asynchroniczne
- Treści żądań i nagłówki
- Obsługa odpowiedzi