0Pricing
Lua Academy · Aula

Tratamento de requisições HTTP em Lua

Acesse cabeçalhos, corpo e argumentos da requisição, e crie respostas com a API ngx.

Tratamento de requisições HTTP em Lua é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Leitura do método e da URI da solicitação

Acesse o método HTTP e a URI pelo namespace ngx.

-- content_by_lua_block
local method = ngx.req.get_method()
local uri    = ngx.var.uri
ngx.say("Method: " .. method .. ", URI: " .. uri)

Leitura dos cabeçalhos da solicitação

ngx.req.get_headers() retorna uma tabela com os cabeçalhos da solicitação.

local headers = ngx.req.get_headers()
local auth = headers["Authorization"]
if not auth then
  ngx.status = 401
  ngx.say("Unauthorized")
  ngx.exit(ngx.HTTP_UNAUTHORIZED)
end

Leitura dos parâmetros de consulta

ngx.req.get_uri_args() retorna uma tabela com os parâmetros de consulta da URL.

local args = ngx.req.get_uri_args()
local page = tonumber(args.page) or 1
local size = tonumber(args.size) or 20
ngx.say("Page: " .. page .. ", Size: " .. size)

Leitura do corpo da solicitação

Leia o corpo da solicitação depois de chamar explicitamente ngx.req.read_body().

ngx.req.read_body()
local body = ngx.req.get_body_data()
if not body then
  ngx.status = 400
  ngx.say("Empty body")
  return
end

Análise do corpo JSON

Use uma biblioteca JSON (por exemplo, cjson) para analisar o corpo da solicitação.

local cjson = require("cjson")
ngx.req.read_body()
local body = ngx.req.get_body_data()
local ok, data = pcall(cjson.decode, body)
if not ok then
  ngx.status = 400
  ngx.say("Invalid JSON")
  return ngx.exit(400)
end

Definição dos cabeçalhos da resposta

Defina os cabeçalhos da resposta por meio de ngx.header antes de chamar ngx.say ou ngx.print.

ngx.header["Content-Type"] = "application/json"
ngx.header["X-Request-ID"] = ngx.var.request_id

Escrita da resposta

ngx.say(s) escreve uma string e uma nova linha. ngx.print(s) escreve sem uma nova linha. ngx.exit(code) encerra a solicitação com o status HTTP fornecido.

ngx.status

Defina o código de status HTTP por meio de ngx.status = 404 antes de escrever o corpo da resposta.

ngx.status = 404
ngx.header["Content-Type"] = "application/json"
ngx.say(cjson.encode({error = "Not Found"}))

Redirecionamentos internos

ngx.exec("/other/path") realiza um redirecionamento interno para outro bloco de localização do Nginx sem uma nova viagem HTTP.

Subsolicitações

ngx.location.capture("/api") faz uma subsolicitação para outra localização e retorna uma tabela com status, cabeçalhos e corpo.

local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
  ngx.exit(403)
end

Compartilhamento do contexto da solicitação

ngx.ctx é uma tabela por solicitação para compartilhar dados entre diferentes manipuladores de fase (acesso → conteúdo → log).

Pergunta sobre tratamento HTTP

Qual função lê os parâmetros de consulta da URL no OpenResty?

Recapitulação: tratamento de solicitações HTTP

Use as funções de ngx.req para ler o método, os cabeçalhos, os argumentos de consulta e o corpo. Defina ngx.header e ngx.status antes de escrever. Use ngx.say/ngx.print para a saída. Compartilhe dados por solicitação por meio de ngx.ctx.

Perguntas Frequentes

A aula “Tratamento de requisições HTTP em Lua” é grátis?

Sim — o texto completo de “Tratamento de requisições HTTP em Lua” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Tratamento de requisições HTTP em Lua”?

Acesse cabeçalhos, corpo e argumentos da requisição, e crie respostas com a API ngx. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Tratamento de requisições HTTP em Lua”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Arquitetura do OpenResty
  2. Tratamento de requisições HTTP em Lua
  3. Cosockets e TCP sem bloqueio
  4. Dicionários de memória compartilhada
← Voltar para Lua Academy