เนื้อหาและส่วนหัวของคำขอ
ส่งข้อมูล 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- java.net.http.HttpClient
- คำขอแบบอะซิงโครนัส
- เนื้อหาและส่วนหัวของคำขอ
- การจัดการการตอบกลับ