0Pricing
Lua Academy · Pelajaran

Permintaan HTTP

Ambil sumber daya web.

Permintaan HTTP adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Modul socket.http

LuaSocket menyediakan klien HTTP tingkat tinggi dalam socket.http. Klien ini dibangun di atas TCP biasa, tetapi menangani pemformatan permintaan, tajuk, dan penguraian data berkeping untuk Anda.

Modul ini berbicara menggunakan HTTP/1.1 melalui TCP biasa. Untuk HTTPS, Anda memerlukan modul pendamping ssl.https dari LuaSec.

local http = require("socket.http")
print(http.PORT)

GET Sederhana

Bentuk paling sederhana menerima URL lalu mengembalikan isi, kode status, tajuk respons, dan baris status.

Kode status 200 berarti berhasil. Isi apa pun yang bernilai nil menunjukkan kegagalan pada tingkat transportasi, bukan kesalahan HTTP.

local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)

Membaca Status

Selalu periksa code numerik sebelum mempercayai isi. Kode 404 tetap mengembalikan isi, yaitu halaman kesalahan, sehingga pemanggilan berhasil pada tingkat TCP.

Nilai keempat yang dikembalikan adalah teks baris status, seperti "HTTP/1.1 200 OK", yang berguna untuk pencatatan.

local body, code, headers, status = http.request(url)
if code == 200 then
  process(body)
else
  print("unexpected:", status)
end

Memeriksa Tajuk

Tabel headers yang dikembalikan memiliki kunci dalam huruf kecil, sehingga Anda membaca headers["content-type"] apa pun penggunaan huruf besar-kecil oleh peladen.

Bidang umum mencakup content-length, content-type, dan location untuk pengalihan.

local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])

Bentuk Permintaan Umum

Meneruskan sebuah tabel ke http.request memberi Anda kendali penuh: metode, tajuk khusus, sumber isi permintaan, dan penampung respons.

Bentuk ini mengembalikan 1 (bukan isi) beserta kode, tajuk, dan status. Anda mengumpulkan isinya sendiri melalui penampung.

local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
  url = "http://example.com/",
  sink = ltn12.sink.table(chunks)
}

Mengirim POST

Untuk POST, tetapkan method = "POST", sediakan source berisi isi, dan tetapkan content-length. Pembantu ltn12.source.string membungkus teks Lua sebagai sumber.

Tetapkan content-type agar sesuai dengan muatan Anda, misalnya application/json.

local body = "{\"name\":\"Lua\"}"
http.request{
  url = url,
  method = "POST",
  source = ltn12.source.string(body),
  headers = {
    ["content-type"] = "application/json",
    ["content-length"] = tostring(#body)
  }
}

Mengumpulkan Isi dengan ltn12

LuaSocket mengalirkan data melalui penyaring ltn12. Penampung menerima potongan data; ltn12.sink.table(t) menambahkannya ke sebuah tabel yang kemudian Anda table.concat.

Model pengaliran ini menjaga penggunaan memori tetap rendah untuk unduhan besar, alih-alih menyangga semuanya sekaligus.

local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)

Tajuk Permintaan Khusus

Tambahkan autentikasi, agen pengguna, atau kuki melalui tabel headers. Kunci harus ditulis dalam huruf kecil agar sesuai dengan yang diharapkan LuaSocket.

Misalnya, kirim token pembawa atau user-agent khusus agar peladen mengenali klien Anda dengan benar.

http.request{
  url = url,
  headers = {
    ["authorization"] = "Bearer " .. token,
    ["user-agent"] = "lua-client/1.0"
  }
}

Mengikuti Pengalihan

Secara bawaan, socket.http secara otomatis mengikuti pengalihan untuk GET. Anda dapat menonaktifkannya dengan redirect = false dalam tabel permintaan untuk memeriksa respons 3xx sendiri.

Saat fitur mengikuti dinonaktifkan, baca headers["location"] untuk menemukan URL berikutnya.

local body, code, headers = http.request{
  url = url,
  redirect = false
}
if code == 301 then print("moved to", headers["location"]) end

Batas Waktu dan HTTPS

Tetapkan batas waktu global untuk pemanggilan HTTP dengan http.TIMEOUT = 10, karena unduhan yang macet jika tidak akan memblokir tanpa batas.

Karena socket.http hanya mendukung teks biasa, gunakan require("ssl.https") dari LuaSec untuk URL https://; API-nya mencerminkan socket.http.

local http = require("socket.http")
http.TIMEOUT = 10
-- for TLS:
local https = require("ssl.https")
local body, code = https.request("https://example.com/")

Penanganan Kesalahan

Bedakan dua lapisan kegagalan. Kegagalan transportasi mengembalikan nil dan teks kesalahan seperti "connection refused" atau "timeout".

Kegagalan aplikasi mengembalikan isi dengan kode 4xx atau 5xx. Implementasi yang tangguh memeriksa kasus nil terlebih dahulu, lalu memilih cabang berdasarkan kode status.

local body, code = http.request(url)
if not body then
  print("transport error:", code)
elseif code >= 400 then
  print("http error:", code)
end

Pemeriksaan Singkat

Ingat kembali apa yang dikembalikan oleh bentuk URL sederhana dari http.request.

Rangkuman

Anda telah mempelajari modul socket.http: GET sederhana yang mengembalikan isi, kode, dan header; bentuk tabel umum dengan sink dan sumber ltn12; isi POST; header khusus; pengalihan; dan batas waktu.

Anda juga telah memisahkan kesalahan transportasi (nil) dari kesalahan status HTTP, serta melihat bahwa HTTPS memerlukan LuaSec dan ssl.https. Dengan demikian, perjalanan jaringan dari TCP mentah hingga HTTP telah selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Permintaan HTTP” gratis?

Ya — teks lengkap “Permintaan HTTP” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Permintaan HTTP”?

Ambil sumber daya web. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Permintaan HTTP” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar TCP
  2. Membangun Klien
  3. Membangun Server
  4. Permintaan HTTP
← Kembali ke Lua Academy