0Pricing
Java Academy · บทเรียน

เนื้อหาและส่วนหัวของคำขอ

ส่งข้อมูล POST และกำหนดส่วนหัว

เนื้อหาและส่วนหัวของคำขอ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

เนื้อหาคำขอและส่วนหัว

คำขอ GET แทบไม่จำเป็นต้องมีเนื้อหา แต่ POST, PUT และ PATCH จำเป็นต้องมี ไคลเอนต์ HTTP ใน JDK ใช้ออบเจ็กต์ BodyPublisher เพื่อจัดเตรียมเนื้อหาคำขอ และใช้เมธอดของตัวสร้างเพื่อกำหนดส่วนหัว

บทเรียนนี้ครอบคลุมการส่งข้อมูลและการควบคุมส่วนหัว เช่น Content-Type

BodyPublishers.ofString

ตัวเผยแพร่ที่ง่ายที่สุดจะส่งเนื้อหาที่เป็นสตริง ให้ส่งตัวเผยแพร่นี้ไปยังเมธอด POST(...) ของตัวสร้างคำขอ

BodyPublishers.noBody() ใช้สำหรับคำขอที่ไม่มีเนื้อหา

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

การกำหนดส่วนหัวเดียว

ใช้ header(name, value) เพื่อเพิ่มส่วนหัวหนึ่งรายการ หากต้องการส่ง JSON คุณแทบจะต้องกำหนด 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());
    }
}

การกำหนดหลายส่วนหัวพร้อมกัน

headers(name1, value1, name2, value2, ...) ใช้กำหนดส่วนหัวหลายรายการในการเรียกใช้ครั้งเดียว จำนวนอาร์กิวเมนต์ต้องเป็นจำนวนคู่ มิฉะนั้นจะโยน 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());
    }
}

ส่วนหัวการอนุญาตสิทธิ์

โทเค็นแบบผู้ถือสิทธิ์จะส่งผ่านส่วนหัว Authorization ให้สร้างค่าเป็นสตริง และอย่าบันทึกโทเค็นดิบลงในบันทึก

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 และ DELETE

ตัวสร้างมีเมธอดเฉพาะ ได้แก่ PUT(publisher), DELETE() และ method(name, publisher) แบบทั่วไปสำหรับสิ่งอื่น เช่น 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());
    }
}

เนื้อหาแบบเข้ารหัสฟอร์ม

สำหรับข้อมูล application/x-www-form-urlencoded คุณต้องสร้างสตริงเนื้อหาด้วยตนเอง โดยเข้ารหัสค่าทุกค่าเป็น URL แล้วเผยแพร่เป็นสตริง

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

การส่งเนื้อหาจากไฟล์

BodyPublishers.ofFile(path) จะส่งไฟล์แบบสตรีมเป็นเนื้อหาคำขอโดยไม่โหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำ เหมาะอย่างยิ่งสำหรับการอัปโหลด

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");
    }
}

เนื้อหาแบบอาร์เรย์ไบต์

เมื่อคุณมีไบต์อยู่ในหน่วยความจำแล้ว BodyPublishers.ofByteArray(byte[]) จะส่งไบต์เหล่านั้นโดยตรง เหมาะสำหรับข้อมูลที่สร้างขึ้นขณะโปรแกรมทำงาน

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");
    }
}

ส่วนหัวที่ถูกจำกัด

เพื่อความปลอดภัย ไคลเอนต์ไม่อนุญาตให้คุณกำหนดส่วนหัวบางรายการ เช่น Host, Content-Length, Connection และ Upgrade การพยายามกำหนดส่วนหัวเหล่านี้จะโยน IllegalArgumentException เพราะไคลเอนต์เป็นผู้จัดการส่วนหัวเหล่านี้เอง

การประกอบทุกอย่างเข้าด้วยกัน

คำขอ JSON แบบ POST ทั่วไปจะรวมตัวเผยแพร่เนื้อหาเข้ากับส่วนหัวประเภทเนื้อหา:

  • .POST(BodyPublishers.ofString(json))
  • .header("Content-Type", "application/json")
  • เพิ่ม .header("Authorization", "Bearer ...") หากจำเป็น

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับเนื้อหาคำขอและส่วนหัว

สรุปทบทวน

คุณได้เรียนรู้การส่งข้อมูลและการควบคุมส่วนหัว:

  • BodyPublishers.ofString / ofByteArray / ofFile ใช้จัดเตรียมเนื้อหาคำขอ
  • POST / PUT / DELETE / เมธอด(...) ใช้เลือกคำกริยา HTTP
  • header(...) และ headers(...) ใช้กำหนดส่วนหัวคำขอ
  • กำหนด Content-Type สำหรับ JSON และข้อมูลฟอร์ม และใช้ Authorization สำหรับโทเค็น
  • ส่วนหัวบางรายการ เช่น โฮสต์และความยาวเนื้อหา ถูกจำกัดและจัดการโดยไคลเอนต์

คำถามที่พบบ่อย

บทเรียน “เนื้อหาและส่วนหัวของคำขอ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เนื้อหาและส่วนหัวของคำขอ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เนื้อหาและส่วนหัวของคำขอ”

ส่งข้อมูล POST และกำหนดส่วนหัว คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “เนื้อหาและส่วนหัวของคำขอ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. java.net.http.HttpClient
  2. คำขอแบบอะซิงโครนัส
  3. เนื้อหาและส่วนหัวของคำขอ
  4. การจัดการการตอบกลับ
← กลับไปที่ Java Academy