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

การส่งคำขอ HTTP

ใช้ GET และ POST ร่วมกับ http.NewRequest และ http.DefaultClient

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

ทางลัด http.Get

http.Get(url) เป็นวิธีที่ง่ายที่สุดในการส่งคำขอ GET ควรปิดเนื้อหาการตอบกลับเสมอ

resp, err := http.Get("https://api.example.com/users")
if err != nil { return err }
defer resp.Body.Close()

http.DefaultClient

http.Get ใช้ DefaultClient ระดับแพ็กเกจ สำหรับระบบจริง ให้สร้างไคลเอ็นต์แบบกำหนดเองพร้อมกำหนดเวลาหมด

client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)

http.NewRequest เพื่อควบคุมได้เต็มที่

ใช้ http.NewRequest เพื่อกำหนดวิธีการ ส่วนหัว และเนื้อหาคำขอ:

req, err := http.NewRequestWithContext(ctx, "POST", url, body)
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)

เนื้อหาคำขอ

ส่งเนื้อหาคำขอผ่าน io.Reader สำหรับข้อมูล JSON ให้ใช้ bytes.NewBuffer(data) หรือ strings.NewReader

data, _ := json.Marshal(payload)
req, _ := http.NewRequestWithContext(ctx, "POST", url, bytes.NewBuffer(data))

การตรวจสอบสถานะการตอบกลับ

ตรวจสอบรหัสสถานะ HTTP เสมอ เพราะโดยค่าเริ่มต้น 4xx/5xx จะไม่ถูกส่งคืนเป็นข้อผิดพลาดของ Go

if resp.StatusCode != http.StatusOK {
    return fmt.Errorf("unexpected status: %d", resp.StatusCode)
}

การถอดรหัสการตอบกลับ JSON

ถอดรหัสเนื้อหาการตอบกลับด้วย json.Decoder เพื่อไม่ต้องอ่านทั้งหมดเข้าไปในหน่วยความจำก่อน:

var result APIResponse
json.NewDecoder(resp.Body).Decode(&result)

พารามิเตอร์การค้นหา

สร้างสตริงการค้นหาด้วย url.Values แล้วแนบเข้ากับ URL:

params := url.Values{}
params.Set("page", "1")
params.Set("limit", "20")
reqURL := baseURL + "?" + params.Encode()

Client.Do และทรานสปอร์ตแบบกำหนดเอง

ห่อ http.DefaultTransport เพื่อเพิ่มตรรกะการลองใหม่ การกำหนดค่า TLS แบบกำหนดเอง หรือการตั้งค่าพร็อกซี โดยยังคงพฤติกรรมเริ่มต้นไว้

ต้องปิดเนื้อหาการตอบกลับ

หากไม่ปิดเนื้อหาการตอบกลับ การเชื่อมต่อ TCP พื้นฐานจะรั่วไหล ควรใช้ defer resp.Body.Close() เสมอ แม้แต่กับการตอบกลับที่มีข้อผิดพลาด

การติดตามการเปลี่ยนเส้นทาง

ไคลเอ็นต์เริ่มต้นจะติดตามการเปลี่ยนเส้นทางได้สูงสุด 10 ครั้ง กำหนด client.CheckRedirect เพื่อปรับแต่งหรือปิดการติดตามการเปลี่ยนเส้นทาง

การกำหนด User-Agent

กำหนดส่วนหัว User-Agent ที่สื่อความหมาย เพื่อให้บันทึกของเซิร์ฟเวอร์ระบุไคลเอ็นต์ของคุณได้:

req.Header.Set("User-Agent", "myapp/1.0 (+https://myapp.com)")

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

เหตุใดจึงควรปิดเนื้อหาการตอบกลับ HTTP เสมอ

ทบทวน: การส่งคำขอ HTTP

ประเด็นสำคัญ:

  • ใช้ defer resp.Body.Close() เสมอ
  • สร้าง http.Client แบบกำหนดเองพร้อม Timeout สำหรับระบบจริง
  • ใช้ http.NewRequestWithContext สำหรับ Context และส่วนหัวแบบกำหนดเอง
  • ตรวจสอบ resp.StatusCode เพราะข้อผิดพลาด HTTP ไม่ใช่ข้อผิดพลาดของ Go

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

บทเรียน “การส่งคำขอ HTTP” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การส่งคำขอ HTTP”

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

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

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

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

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

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

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

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

  1. การส่งคำขอ HTTP
  2. การตั้งเวลาหมดอายุและส่วนหัว
  3. การถอดรหัสการตอบกลับ JSON
  4. การจัดการข้อผิดพลาดและตรรกะการลองใหม่
← กลับไปที่ Go Academy