HTTP-Requests
Rufen Sie Webressourcen ab.
HTTP-Requests ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Modul socket.http
LuaSocket enthält in socket.http einen höherstufigen HTTP-Client. Er baut auf rohem TCP auf, übernimmt aber die Formatierung von Anfragen, Header und die Dekodierung von Chunked-Daten für Sie.
Er verwendet HTTP/1.1 über unverschlüsseltes TCP. Für HTTPS benötigen Sie das ergänzende Modul ssl.https aus LuaSec.
local http = require("socket.http")
print(http.PORT)Ein einfacher GET-Aufruf
Die einfachste Form erwartet eine URL und gibt den Body, den Statuscode, die Antwort-Header und die Statuszeile zurück.
Ein Statuscode von 200 bedeutet Erfolg. Ein Body mit dem Wert nil weist auf einen Fehler auf Transportebene und nicht auf einen HTTP-Fehler hin.
local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)Den Status auslesen
Prüfen Sie immer den numerischen code, bevor Sie dem Body vertrauen. Ein 404 gibt weiterhin einen Body zurück, nämlich die Fehlerseite. Der Aufruf war daher auf TCP-Ebene erfolgreich.
Der vierte Rückgabewert ist die Statuszeile als Zeichenfolge, beispielsweise "HTTP/1.1 200 OK", und eignet sich für die Protokollierung.
local body, code, headers, status = http.request(url)
if code == 200 then
process(body)
else
print("unexpected:", status)
endHeader untersuchen
Die zurückgegebene Tabelle headers enthält Schlüssel in Kleinbuchstaben. Daher lesen Sie headers["content-type"], unabhängig davon, wie der Server die Groß- und Kleinschreibung verwendet hat.
Zu den häufigen Feldern gehören content-length, content-type und location für Weiterleitungen.
local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])Die allgemeine Form für Anfragen
Wenn Sie eine Tabelle an http.request übergeben, erhalten Sie vollständige Kontrolle über Methode, benutzerdefinierte Header, die Quelle des Anfrage-Bodys und einen Sink für die Antwort.
Diese Form gibt 1 zurück, nicht den Body, sowie Code, Header und Status. Den Body sammeln Sie selbst über den Sink.
local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
url = "http://example.com/",
sink = ltn12.sink.table(chunks)
}POST senden
Für POST setzen Sie method = "POST", geben eine source mit dem Body an und setzen content-length. Der Helfer ltn12.source.string verpackt eine Lua-Zeichenfolge als Quelle.
Setzen Sie content-type passend zu Ihrer Nutzlast, zum Beispiel auf 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)
}
}Den Body mit ltn12 sammeln
LuaSocket streamt Daten durch ltn12-Filter. Ein Sink verarbeitet Datenblöcke; ltn12.sink.table(t) hängt sie an eine Tabelle an, die Sie anschließend mit table.concat zusammenfügen.
Dieses Streaming-Modell hält den Speicherverbrauch bei großen Downloads niedrig, anstatt alles auf einmal zwischenzuspeichern.
local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)Benutzerdefinierte Anfrage-Header
Fügen Sie Authentifizierungsdaten, User-Agents oder Cookies über die Tabelle headers hinzu. Die Schlüssel sollten in Kleinbuchstaben geschrieben werden, entsprechend den Erwartungen von LuaSocket.
Senden Sie beispielsweise ein Bearer-Token oder einen benutzerdefinierten user-agent, damit der Server Ihren Client korrekt identifizieren kann.
http.request{
url = url,
headers = {
["authorization"] = "Bearer " .. token,
["user-agent"] = "lua-client/1.0"
}
}Weiterleitungen folgen
Standardmäßig folgt socket.http bei GET automatisch Weiterleitungen. Sie können dies mit redirect = false in der Anfragetabelle deaktivieren, um die 3xx-Antwort selbst zu untersuchen.
Wenn das Folgen deaktiviert ist, lesen Sie headers["location"], um die nächste URL zu finden.
local body, code, headers = http.request{
url = url,
redirect = false
}
if code == 301 then print("moved to", headers["location"]) endTimeouts und HTTPS
Setzen Sie mit http.TIMEOUT = 10 ein globales Timeout für HTTP-Aufrufe, da blockierte Downloads sonst unbegrenzt warten.
Da socket.http nur unverschlüsselten Datenverkehr unterstützt, verwenden Sie für https://-URLs require("ssl.https") aus LuaSec. Die API entspricht der von 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/")Fehlerbehandlung
Unterscheiden Sie zwei Fehlerebenen. Ein Transportfehler gibt nil und eine Fehlerzeichenfolge wie "connection refused" oder "timeout" zurück.
Ein Anwendungsfehler gibt einen Body mit einem 4xx- oder 5xx-Code zurück. Robuster Code prüft zuerst den Fall nil und wertet anschließend den Statuscode aus.
local body, code = http.request(url)
if not body then
print("transport error:", code)
elseif code >= 400 then
print("http error:", code)
endKurzer Test
Rufen Sie sich in Erinnerung, was die einfache URL-Form von http.request zurückgibt.
Zusammenfassung
Sie haben das Modul socket.http kennengelernt: einfache GET-Anfragen, die Body, Statuscode und Header zurückgeben, die allgemeine Tabellenform mit ltn12-Senken und -Quellen, POST-Bodies, benutzerdefinierte Header, Weiterleitungen und Zeitüberschreitungen.
Außerdem haben Sie Transportfehler (nil) von HTTP-Statusfehlern unterschieden und gesehen, dass HTTPS LuaSecs ssl.https benötigt. Damit ist der Weg von rohem TCP zu HTTP abgeschlossen.
Häufig gestellte Fragen
Ist die Lektion „HTTP-Requests“ kostenlos?
Ja — der vollständige Text von „HTTP-Requests“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „HTTP-Requests“?
Rufen Sie Webressourcen ab. Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „HTTP-Requests“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.