0Pricing
Lua Academy · Leçon

Requêtes HTTP

Récupérez des ressources web.

Requêtes HTTP est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Le module socket.http

LuaSocket fournit un client HTTP de haut niveau dans socket.http. Il s'appuie sur TCP brut, mais prend en charge pour vous le formatage des requêtes, les en-têtes et le décodage par blocs.

Il parle HTTP/1.1 sur TCP non chiffré. Pour HTTPS, vous avez besoin du module complémentaire ssl.https de LuaSec.

local http = require("socket.http")
print(http.PORT)

Un GET simple

La forme la plus simple prend une URL et renvoie le corps, le code d'état, les en-têtes de réponse et la ligne d'état.

Un code d'état égal à 200 signifie que la requête a réussi. Tout corps égal à nil indique un échec au niveau du transport, et non une erreur HTTP.

local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)

Lire l'état

Vérifiez toujours le code numérique avant de considérer le corps comme fiable. Un 404 renvoie tout de même un corps, c'est-à-dire la page d'erreur : l'appel a donc réussi au niveau TCP.

La quatrième valeur renvoyée est la chaîne de la ligne d'état, telle que "HTTP/1.1 200 OK", utile pour la journalisation.

local body, code, headers, status = http.request(url)
if code == 200 then
  process(body)
else
  print("unexpected:", status)
end

Inspecter les en-têtes

La table headers renvoyée contient des clés en minuscules. Vous lisez donc headers["content-type"], quelle que soit la casse utilisée par le serveur.

Les champs courants comprennent content-length, content-type et location pour les redirections.

local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])

La forme générique d'une requête

Passer une table à http.request offre un contrôle complet : méthode, en-têtes personnalisés, source du corps de la requête et réceptacle pour la réponse.

Cette forme renvoie 1 (et non le corps), ainsi que le code, les en-têtes et l'état. Vous récupérez vous-même le corps au moyen du réceptacle.

local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
  url = "http://example.com/",
  sink = ltn12.sink.table(chunks)
}

Envoyer un POST

Pour POST, définissez method = "POST", fournissez une source contenant le corps et définissez content-length. L'utilitaire ltn12.source.string encapsule une chaîne Lua comme source.

Définissez content-type pour qu'il corresponde à votre contenu, par exemple 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)
  }
}

Collecter le corps avec ltn12

LuaSocket fait transiter les données par les filtres ltn12. Un réceptacle consomme les blocs ; ltn12.sink.table(t) les ajoute à une table que vous concaténez ensuite avec table.concat.

Ce modèle en flux limite l'utilisation de la mémoire pour les téléchargements volumineux, au lieu de tout mettre en tampon en une seule fois.

local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)

En-têtes de requête personnalisés

Ajoutez l'authentification, les agents utilisateurs ou les cookies au moyen de la table headers. Les clés doivent être en minuscules, conformément aux attentes de LuaSocket.

Par exemple, envoyez un jeton porteur ou un user-agent personnalisé afin que le serveur identifie correctement votre client.

http.request{
  url = url,
  headers = {
    ["authorization"] = "Bearer " .. token,
    ["user-agent"] = "lua-client/1.0"
  }
}

Suivre les redirections

Par défaut, socket.http suit automatiquement les redirections pour GET. Vous pouvez désactiver ce comportement avec redirect = false dans la table de requête afin d'examiner vous-même la réponse 3xx.

Lorsque le suivi est désactivé, lisez headers["location"] pour trouver l'URL suivante.

local body, code, headers = http.request{
  url = url,
  redirect = false
}
if code == 301 then print("moved to", headers["location"]) end

Délais d'attente et HTTPS

Définissez un délai d'attente global pour les appels HTTP avec http.TIMEOUT = 10, car les téléchargements bloqués resteraient sinon suspendus indéfiniment.

Comme socket.http ne prend en charge que le texte non chiffré, utilisez require("ssl.https") de LuaSec pour les URL en https:// ; son interface reproduit celle de 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/")

Gestion des erreurs

Distinguez deux niveaux d'échec. Un échec du transport renvoie nil et une chaîne d'erreur telle que "connection refused" ou "timeout".

Un échec applicatif renvoie un corps accompagné d'un code 4xx ou 5xx. Un code robuste vérifie d'abord le cas nil, puis se branche selon le code d'état.

local body, code = http.request(url)
if not body then
  print("transport error:", code)
elseif code >= 400 then
  print("http error:", code)
end

Vérification rapide

Rappelez-vous ce que renvoie la forme d’URL simple de http.request.

Récapitulatif

Vous avez découvert le module socket.http : des requêtes GET simples renvoyant le corps, le code et les en-têtes, la forme générique sous forme de table avec des puits et des sources ltn12, les corps des requêtes POST, les en-têtes personnalisés, les redirections et les délais d’attente.

Vous avez également distingué les erreurs de transport (nil) des erreurs de statut HTTP et constaté que HTTPS nécessite ssl.https de LuaSec. Vous avez ainsi parcouru tout le cheminement réseau, de TCP brut à HTTP.

Questions Fréquemment Posées

La leçon « Requêtes HTTP » est-elle gratuite ?

Oui — le texte complet de « Requêtes HTTP » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Requêtes HTTP » ?

Récupérez des ressources web. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Requêtes HTTP » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Bases de TCP
  2. Construire un client
  3. Construire un serveur
  4. Requêtes HTTP
← Retour à Lua Academy