HTTP-requests
Haal webbronnen op.
HTTP-requests is een gratis Lua Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.
De module socket.http
LuaSocket bevat een HTTP-client op hoog niveau in socket.http. Die bouwt voort op onbewerkte TCP, maar handelt de opmaak van verzoeken, kopteksten en segmentgewijze decodering voor je af.
De module ondersteunt HTTP/1.1 via gewone TCP. Voor HTTPS heb je de bijbehorende module ssl.https uit LuaSec nodig.
local http = require("socket.http")
print(http.PORT)Een eenvoudige GET
De eenvoudigste vorm neemt een URL aan en retourneert de inhoud, de statuscode, de kopteksten van het antwoord en de statusregel.
Een statuscode van 200 betekent succes. Een inhoud van nil wijst op een fout op transportniveau en niet op een HTTP-fout.
local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)De status lezen
Controleer altijd eerst de numerieke code voordat je de inhoud vertrouwt. Een 404 retourneert nog steeds inhoud, namelijk de foutpagina, dus de aanroep is op TCP-niveau geslaagd.
De vierde retourwaarde is de tekenreeks van de statusregel, zoals "HTTP/1.1 200 OK", en is nuttig voor logregistratie.
local body, code, headers, status = http.request(url)
if code == 200 then
process(body)
else
print("unexpected:", status)
endKopteksten inspecteren
De geretourneerde tabel headers heeft sleutels in kleine letters. Je leest dus headers["content-type"], ongeacht het gebruik van hoofdletters en kleine letters door de server.
Veelvoorkomende velden zijn content-length, content-type en location voor omleidingen.
local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])De algemene vorm voor verzoeken
Als je een tabel aan http.request doorgeeft, krijg je volledige controle: methode, aangepaste kopteksten, een bron voor de inhoud van het verzoek en een bestemming voor het antwoord.
Deze vorm retourneert 1 en niet de inhoud, plus de code, kopteksten en status. Je verzamelt de inhoud zelf via de bestemming.
local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
url = "http://example.com/",
sink = ltn12.sink.table(chunks)
}Een POST verzenden
Stel voor POST method = "POST" in, geef een source met de inhoud op en stel content-length in. De helper ltn12.source.string verpakt een Lua-tekenreeks als bron.
Stel content-type in overeenkomstig je lading, bijvoorbeeld op 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)
}
}De inhoud verzamelen met ltn12
LuaSocket stroomt gegevens door filters van ltn12. Een doel verwerkt segmenten; ltn12.sink.table(t) voegt ze toe aan een tabel die je daarna samenvoegt met table.concat.
Dit streamingmodel houdt het geheugengebruik laag bij grote downloads, in plaats van alles in één keer te bufferen.
local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)Aangepaste kopteksten voor verzoeken
Voeg authenticatie, gebruikersagenten of cookies toe via de tabel headers. Sleutels moeten in kleine letters staan, zodat ze overeenkomen met de manier waarop LuaSocket ze verwacht.
Stuur bijvoorbeeld een token voor bearer-authenticatie of een aangepaste user-agent, zodat de server je client correct herkent.
http.request{
url = url,
headers = {
["authorization"] = "Bearer " .. token,
["user-agent"] = "lua-client/1.0"
}
}Omleidingen volgen
Standaard volgt socket.http omleidingen automatisch voor GET. Je kunt dit uitschakelen met redirect = false in de verzoekentabel, zodat je het 3xx-antwoord zelf kunt inspecteren.
Als volgen is uitgeschakeld, lees je headers["location"] om de volgende URL te vinden.
local body, code, headers = http.request{
url = url,
redirect = false
}
if code == 301 then print("moved to", headers["location"]) endTime-outs en HTTPS
Stel een globale time-out in voor HTTP-aanroepen met http.TIMEOUT = 10, omdat vastgelopen downloads anders voor altijd blokkeren.
Omdat socket.http alleen tekst zonder versleuteling gebruikt, gebruik je voor URL's met https:// require("ssl.https") uit LuaSec. De API daarvan werkt op dezelfde manier als die van 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/")Fouten afhandelen
Maak onderscheid tussen twee foutlagen. Een transportfout retourneert nil en een fouttekenreeks, zoals "connection refused" of "timeout".
Een fout op toepassingsniveau retourneert inhoud met een 4xx- of 5xx-code. Robuuste code controleert eerst het geval nil en kiest daarna een tak op basis van de statuscode.
local body, code = http.request(url)
if not body then
print("transport error:", code)
elseif code >= 400 then
print("http error:", code)
endKorte controle
Herhaal wat de eenvoudige URL-vorm van http.request oplevert.
Samenvatting
Je hebt de module socket.http geleerd: eenvoudige GET-verzoeken die inhoud/statuscode/kopteksten opleveren, de algemene tabelvorm met ltn12-afvoerfuncties en bronfuncties, POST-inhoud, aangepaste kopteksten, omleidingen en time-outs.
Je hebt transportfouten (nil) ook onderscheiden van HTTP-statusfouten en gezien dat HTTPS de ssl.https van LuaSec nodig heeft. Daarmee is het netwerktraject van onbewerkte TCP naar HTTP voltooid.
Leer Lua met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “HTTP-requests” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “HTTP-requests”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.
Wat leer ik in “HTTP-requests”?
Haal webbronnen op. Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Lua Academy te beginnen?
Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “HTTP-requests”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Lua Academy?
Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- TCP-basisprincipes
- Een client bouwen
- Een server bouwen
- HTTP-requests