Skicka en http-förfrågan

Lua:
Skicka en http-förfrågan

Så här gör du:

Lua har inte inbyggt stöd för HTTP, så vi använder socket.http från LuaSocket biblioteket. Först, installera LuaSocket:

luarocks install luasocket

Sedan en enkel GET-begäran:

local http = require("socket.http")
local body, code = http.request("http://httpbin.org/get")

if code == 200 then
    print("Hämtat innehåll:")
    print(body)
else
    print("HTTP-begäran misslyckades med kod: " .. code)
end

Och för en POST-begäran med data:

local http = require("socket.http")
local ltn12 = require("ltn12")

local response = {}
local body, code = http.request{
    url = "http://httpbin.org/post",
    method = "POST",
    headers = {
        ["Content-Type"] = "application/x-www-form-urlencoded"
    },
    source = ltn12.source.string("nyckel1=värde1&nyckel2=värde2"),
    sink = ltn12.sink.table(response)
}

if code == 200 then
    print("Serverns svar:")
    print(table.concat(response))
else
    print("HTTP-begäran misslyckades med kod: " .. code)
end

Fördjupning

Före LuaSocket var alternativet att implementera en socketkommunikation från grunden via Lua:s inbyggda filhanteringsfunktioner, vilket var både svårare och mindre säkert. LuaSocket gör det enkelt att hantera HTTP-begäran genom att abstrahera bort alla komplexiteter som att hantera TCP/IP-protokoll.

Utöver HTTP erbjuder LuaSocket även SMTP, FTP och andra nätverksprotokoll. För HTTPS-stöd behöver man oftast en tilläggsmodul - LuaSec. Det finns också modernare alternativ som luajit-request, som är baserat på LuaJIT.

När det kommer till implementationen av en HTTP-begäran är det viktigt att hantera timeouts och fel korrekt för att undvika att tillämpningen hänger sig eller kraschar.

Se även