HTTP-forespørsler
Hent webressurser.
HTTP-forespørsler er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
socket.http-modulen
LuaSocket leveres med en HTTP-klient på høyt nivå i socket.http. Den bygger på rå TCP, men håndterer forespørselsformattering, headere og dekoding av chunked-data for deg.
Den bruker HTTP/1.1 over vanlig TCP. For HTTPS trenger du den tilhørende ssl.https-modulen fra LuaSec.
local http = require("socket.http")
print(http.PORT)En enkel GET
Den enkleste formen tar en URL og returnerer innholdet, statuskoden, svarheaderne og statuslinjen.
En statuskode på 200 betyr at forespørselen var vellykket. Et nil-innhold betyr at det oppstod en feil på transportnivå, ikke en HTTP-feil.
local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)Lese statusen
Kontroller alltid den numeriske code før du stoler på innholdet. En 404 returnerer fortsatt et innhold, nemlig feilsiden, så kallet var vellykket på TCP-nivå.
Den fjerde returverdien er statuslinjen som en streng, for eksempel "HTTP/1.1 200 OK", og er nyttig for logging.
local body, code, headers, status = http.request(url)
if code == 200 then
process(body)
else
print("unexpected:", status)
endUndersøke headere
Den returnerte tabellen headers har nøkler skrevet med små bokstaver, så du leser headers["content-type"] uavhengig av hvordan serveren skrev dem.
Vanlige felt er blant annet content-length, content-type og location for omdirigeringer.
local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])Det generiske forespørselsformatet
Ved å sende en tabell til http.request får du full kontroll over metode, egendefinerte headere, kilde for forespørselsinnholdet og et mottak for svaret.
Denne formen returnerer 1 (ikke innholdet) samt kode, headere og status. Du samler selv inn innholdet via mottaket.
local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
url = "http://example.com/",
sink = ltn12.sink.table(chunks)
}Sende en POST
For POST angir du method = "POST", oppgir en source med innholdet og angir content-length. Hjelpefunksjonen ltn12.source.string pakker inn en Lua-streng som en kilde.
Angi content-type slik at den samsvarer med innholdet, for eksempel 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)
}
}Samle innholdet med ltn12
LuaSocket strømmer data gjennom ltn12-filtre. Et mottak bruker biter, og ltn12.sink.table(t) legger dem til i en tabell som du deretter kan sende til table.concat.
Denne strømmemodellen holder minnebruken lav ved store nedlastinger, i stedet for å bufre alt på én gang.
local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)Egendefinerte forespørselsheadere
Legg til autentisering, brukeragenter eller informasjonskapsler via tabellen headers. Nøklene bør skrives med små bokstaver, slik LuaSocket forventer dem.
Du kan for eksempel sende et bearer-token eller en egendefinert user-agent, slik at serveren identifiserer klienten riktig.
http.request{
url = url,
headers = {
["authorization"] = "Bearer " .. token,
["user-agent"] = "lua-client/1.0"
}
}Følge omdirigeringer
Som standard følger socket.http automatisk omdirigeringer for GET. Du kan deaktivere dette med redirect = false i forespørselstabellen for å undersøke 3xx-svaret selv.
Når dette er deaktivert, leser du headers["location"] for å finne den neste URL-en.
local body, code, headers = http.request{
url = url,
redirect = false
}
if code == 301 then print("moved to", headers["location"]) endTidsavbrudd og HTTPS
Angi et globalt tidsavbrudd for HTTP-kall med http.TIMEOUT = 10, siden nedlastinger som henger, ellers blokkerer for alltid.
Fordi socket.http bare bruker klartekst, må du bruke require("ssl.https") fra LuaSec for URL-er med https://; API-et speiler 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/")Feilhåndtering
Skill mellom to feillag. En transportfeil returnerer nil og en feilstreng, for eksempel "connection refused" eller "timeout".
En feil på applikasjonsnivå returnerer et innhold med en 4xx- eller 5xx-kode. Robust kode kontrollerer først nil-tilfellet og vurderer deretter statuskoden.
local body, code = http.request(url)
if not body then
print("transport error:", code)
elseif code >= 400 then
print("http error:", code)
endHurtigsjekk
Husk hva den enkle URL-formen av http.request returnerer.
Oppsummering
Du har lært om socket.http-modulen: enkle GET-forespørsler som returnerer body, code og headers, den generelle tabellformen med ltn12-sluk og -kilder, POST-bodyer, egendefinerte headere, viderekoblinger og tidsavbrudd.
Du har også skilt transportfeil (nil) fra HTTP-statusfeil, og sett at HTTPS krever LuaSecs ssl.https. Dermed er reisen gjennom nettverk fra rå TCP til HTTP fullført.
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «HTTP-forespørsler» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «HTTP-forespørsler», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «HTTP-forespørsler»?
Hent webressurser. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «HTTP-forespørsler»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grunnleggende TCP
- Bygg en klient
- Bygg en server
- HTTP-forespørsler