HTTP-forespørgsler
Hent webressourcer.
HTTP-forespørgsler er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.
Modulet socket.http
LuaSocket leveres med en HTTP-klient på højt niveau i socket.http. Den bygger på rå TCP, men håndterer formatering af forespørgsler, headere og dekodning af blokopdelte data for dig.
Den taler HTTP/1.1 over almindelig TCP. Til HTTPS skal du bruge det tilhørende modul ssl.https fra LuaSec.
local http = require("socket.http")
print(http.PORT)En enkel GET
Den enkleste form tager en URL og returnerer indholdet, statuskoden, svarheaderne og statuslinjen.
Statuskoden 200 betyder succes. Et nil-indhold angiver en fejl på transportniveau i stedet for en HTTP-fejl.
local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)Læsning af status
Kontrollér altid den numeriske code, før du stoler på indholdet. En 404 returnerer stadig indhold, nemlig fejlsiden, så kaldet lykkedes på TCP-niveau.
Den fjerde returværdi er statuslinjen som tekst, f.eks. "HTTP/1.1 200 OK", hvilket er nyttigt til logning.
local body, code, headers, status = http.request(url)
if code == 200 then
process(body)
else
print("unexpected:", status)
endUndersøgelse af headere
Den returnerede tabel med headers har nøgler med små bogstaver, så du læser headers["content-type"] uanset hvilke store og små bogstaver serveren brugte.
Almindelige felter omfatter content-length, content-type og location til omdirigeringer.
local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])Den generiske forespørgselsform
Ved at sende en tabel til http.request får du fuld kontrol over metode, brugerdefinerede headere, kilde til forespørgselsindholdet og en modtager til svaret.
Denne form returnerer 1 (ikke indholdet) samt statuskode, headere og status. Du indsamler selv indholdet via modtageren.
local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
url = "http://example.com/",
sink = ltn12.sink.table(chunks)
}Afsendelse af en POST
Ved POST skal du angive method = "POST", levere en source med indholdet og angive content-length. Hjælpefunktionen ltn12.source.string pakker en Lua-streng ind som en kilde.
Angiv content-type, så den passer til dit dataindhold, f.eks. 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)
}
}Indsamling af indholdet med ltn12
LuaSocket strømmer data gennem ltn12-filtre. En modtager forbruger blokke; ltn12.sink.table(t) føjer dem til en tabel, som du derefter samler med table.concat.
Denne model med løbende behandling holder hukommelsesforbruget nede ved store downloads i stedet for at gemme alt i en buffer på én gang.
local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)Brugerdefinerede headere
Tilføj godkendelse, brugeragenter eller cookies via tabellen headers. Nøglerne bør være skrevet med små bogstaver, så de passer til den måde, LuaSocket forventer dem på.
Du kan f.eks. sende et bearer-token eller en brugerdefineret user-agent, så serveren identificerer din klient korrekt.
http.request{
url = url,
headers = {
["authorization"] = "Bearer " .. token,
["user-agent"] = "lua-client/1.0"
}
}Følg omdirigeringer
Som standard følger socket.http automatisk omdirigeringer for GET. Du kan slå dette fra med redirect = false i forespørgselstabellen, så du selv kan undersøge svaret med 3xx.
Når automatisk omdirigering er slået fra, skal du læse headers["location"] for at finde den næste URL.
local body, code, headers = http.request{
url = url,
redirect = false
}
if code == 301 then print("moved to", headers["location"]) endTidsgrænser og HTTPS
Angiv en global tidsgrænse for HTTP-kald med http.TIMEOUT = 10, eftersom fastlåste downloads ellers blokerer for evigt.
Da socket.http kun understøtter klartekst, skal du bruge require("ssl.https") fra LuaSec til URL'er med https://; API'et svarer til 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/")Håndtering af fejl
Skeln mellem to fejllag. En transportfejl returnerer nil og en fejltekst som "connection refused" eller "timeout".
En applikationsfejl returnerer indhold sammen med en 4xx- eller 5xx-kode. Robust kode kontrollerer først tilfældet med nil og vælger derefter ud fra statuskoden.
local body, code = http.request(url)
if not body then
print("transport error:", code)
elseif code >= 400 then
print("http error:", code)
endHurtigt tjek
Husk, hvad den enkle URL-form af http.request returnerer.
Opsummering
Du har lært modulet socket.http: enkle GET-anmodninger, der returnerer body, statuskode og headers, den generiske tabel-form med ltn12-modtagere og -kilder, POST-bodyer, brugerdefinerede headers, omdirigeringer og timeouts.
Du har også adskilt transportfejl (nil) fra HTTP-statusfejl og set, at HTTPS kræver LuaSecs ssl.https. Det afslutter netværksrejsen fra rå TCP til HTTP.
Lær Lua med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 40
- Lektioner
- 159
Ofte stillede spørgsmål
Er lektionen “HTTP-forespørgsler” gratis?
Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “HTTP-forespørgsler”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “HTTP-forespørgsler”?
Hent webressourcer. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lua Academy?
Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “HTTP-forespørgsler”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lua Academy-lektion?
Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende TCP
- Opbyg en klient
- Opbyg en server
- HTTP-forespørgsler