HTTP-pyynnöt
Noutakaa web-resursseja.
HTTP-pyynnöt on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
socket.http-moduuli
LuaSocket sisältää korkean tason HTTP-asiakkaan moduulissa socket.http. Se perustuu suoraan TCP:hen, mutta hoitaa pyyntöjen muotoilun, headerit ja chunked-koodauksen purkamisen puolestanne.
Se käyttää HTTP/1.1-protokollaa salaamattoman TCP:n päällä. HTTPS-yhteyksiä varten tarvitsette LuaSecin mukana tulevan ssl.https-moduulin.
local http = require("socket.http")
print(http.PORT)Yksinkertainen GET
Yksinkertaisimmassa muodossa annetaan URL-osoite, ja kutsu palauttaa rungon, statuskoodin, vastausheaderit ja statusrivin.
Statuskoodi 200 tarkoittaa onnistumista. Arvoa nil vastaava runko tarkoittaa siirtotason virhettä, ei HTTP-virhettä.
local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)Tilan lukeminen
Tarkistakaa aina numeerinen code ennen kuin luotatte runkoon. Myös 404 palauttaa rungon eli virhesivun, joten kutsu onnistui TCP-tasolla.
Neljäs palautusarvo on statusrivi merkkijonona, esimerkiksi "HTTP/1.1 200 OK", ja siitä on hyötyä lokituksessa.
local body, code, headers, status = http.request(url)
if code == 200 then
process(body)
else
print("unexpected:", status)
endHeaderien tarkasteleminen
Palautettu headers-taulukko sisältää pienaakkosiksi muunnetut avaimet, joten luette arvon headers["content-type"] riippumatta siitä, miten palvelin kirjoitti kirjainkoon.
Yleisiä kenttiä ovat content-length, content-type ja uudelleenohjauksissa käytettävä location.
local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])Yleiskäyttöinen pyyntömuoto
Taulukon välittäminen kutsulle http.request antaa täyden hallinnan: method-asetuksen, mukautetut headerit, request body source -lähteen ja response sink -kohteen.
Tämä muoto palauttaa arvon 1 (ei runkoa) sekä coden, headers-taulukon ja statuksen. Keräätte rungon itse sink-kohteen avulla.
local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
url = "http://example.com/",
sink = ltn12.sink.table(chunks)
}POST-pyynnön lähettäminen
POST-pyyntöä varten asettakaa method = "POST", antakaa runko source-lähteenä ja määrittäkää content-length. Apufunktio ltn12.source.string paketoi Lua-merkkijonon lähteeksi.
Asettakaa content-type vastaamaan hyötykuormaa, esimerkiksi arvoksi 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)
}
}Rungon kerääminen ltn12:lla
LuaSocket välittää tietoja ltn12-suodattimien kautta. Sink kuluttaa palasia; ltn12.sink.table(t) lisää ne taulukkoon, jonka yhdistätte sitten kutsulla table.concat.
Tämä suoratoistomalli pitää suurten latausten muistinkulutuksen pienenä sen sijaan, että kaikki tiedot puskuroitaisiin kerralla.
local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)Mukautetut pyyntöheaderit
Lisätkää todennus, user agent tai evästeet headers-taulukon kautta. Avainten on oltava pienaakkosilla, jotta ne vastaavat LuaSocketin odottamaa muotoa.
Voitte esimerkiksi lähettää bearer-tokenin tai mukautetun user-agent-arvon, jotta palvelin tunnistaa asiakkaanne oikein.
http.request{
url = url,
headers = {
["authorization"] = "Bearer " .. token,
["user-agent"] = "lua-client/1.0"
}
}Uudelleenohjausten seuraaminen
Oletusarvoisesti socket.http seuraa GET-pyyntöjen uudelleenohjauksia automaattisesti. Voitte poistaa tämän käytöstä pyynnön taulukossa asetuksella redirect = false ja tarkastella 3xx-vastausta itse.
Kun seuraaminen on poistettu käytöstä, lukekaa headers["location"] löytääksenne seuraavan URL-osoitteen.
local body, code, headers = http.request{
url = url,
redirect = false
}
if code == 301 then print("moved to", headers["location"]) endAikakatkaisut ja HTTPS
Asettakaa HTTP-kutsujen yleinen aikakatkaisu arvolla http.TIMEOUT = 10, sillä muuten jumiutuneet lataukset estävät ohjelman toiminnan ikuisesti.
Koska socket.http käyttää vain salaamatonta yhteyttä, käyttäkää LuaSecin moduulia require("ssl.https") https://-osoitteissa. Sen rajapinta vastaa socket.http-moduulin rajapintaa.
local http = require("socket.http")
http.TIMEOUT = 10
-- for TLS:
local https = require("ssl.https")
local body, code = https.request("https://example.com/")Virheiden käsittely
Erottakaa toisistaan kaksi virhetasoa. Siirtovirhe palauttaa arvon nil ja virhemerkkijonon, kuten "connection refused" tai "timeout".
Sovellusvirhe palauttaa rungon sekä 4xx- tai 5xx-koodin. Luotettava koodi tarkistaa ensin nil-tilanteen ja haarautuu sen jälkeen statuskoodin perusteella.
local body, code = http.request(url)
if not body then
print("transport error:", code)
elseif code >= 400 then
print("http error:", code)
endPikatarkistus
Palauttakaa mieleenne, mitä http.request-funktion yksinkertainen URL-muoto palauttaa.
Kertaus
Opitte socket.http-moduulin käytön: yksinkertaiset GET-pyynnöt, jotka palauttavat rungon, tilakoodin ja otsakkeet, yleisen taulukkomuodon ltn12-nieluineen ja -lähteineen, POST-rungot, mukautetut otsakkeet, uudelleenohjaukset ja aikakatkaisut.
Opitte myös erottamaan siirtovirheet (nil) HTTP-tilakoodivirheistä ja näitte, että HTTPS vaatii LuaSecin ssl.https-moduulin. Näin verkkoyhteyksien käsittely raakatason TCP:stä HTTP:hen tulee päätökseen.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”HTTP-pyynnöt” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “HTTP-pyynnöt”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”HTTP-pyynnöt”?
Noutakaa web-resursseja. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”HTTP-pyynnöt”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.