0Pricing
Java Academy · Lekcja

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

  1. java.net.http.HttpClient
  2. Żądania asynchroniczne
  3. Treści żądań i nagłówki
  4. Obsługa odpowiedzi
← Powrót do Java Academy