Pular para o conteúdo

Módulo HTTP

Este módulo fornece funções para realizar requisições HTTP a partir de scripts Lua. As funções retornam uma tabela com os resultados da requisição.

Função genérica para realizar requisições HTTP com qualquer método.

Parâmetros:

  • method (string): Método HTTP (GET, POST, PUT, DELETE, PATCH, HEAD)

  • url (string): URL do endpoint

  • body (string, opcional): Corpo da requisição

  • headers (tabela, opcional): Cabeçalhos HTTP como pares chave-valor

  • options (tabela, opcional): Opções adicionais da requisição

Opções disponíveis:

  • verify (boolean): Verificar certificados SSL (padrão: true)

  • charset (string): Charset para decodificação da resposta (padrão: “utf-8”)

Aviso de Segurança:

Desabilitar a verificação SSL (verify = false) expõe a conexão a ataques “man-in-the-middle” e deve ser usado apenas em ambientes de desenvolvimento ou teste controlados. Nunca utilize esta opção em produção com servidores reais ou com dados sensíveis.

Valor de retorno:

Retorna uma tabela com:

  • status (number): Código de status HTTP

  • body (string): Corpo da resposta

Exemplo:

local resultado = http.request("POST", "https://api.exemplo.com/dados",
'{"nome": "teste", "valor": 123}',
{["Content-Type"] = "application/json"},
{verify = true, charset = "utf-8"}
)
print("Status:", resultado.status)
print("Resposta:", resultado.body)

Realiza uma requisição HTTP GET.

Parâmetros:

  • url (string): URL do endpoint

  • body (string, opcional): Corpo da requisição (raro para GET, mas suportado)

  • headers (tabela, opcional): Cabeçalhos HTTP

  • options (tabela, opcional): Opções adicionais

Exemplo:

local resultado = http.get("https://api.exemplo.com/usuarios/1",
nil,
{["Authorization"] = "Bearer token123"},
{verify = true}
)
if resultado.status == 200 then
print("Dados recebidos:", resultado.body)
else
print("Erro:", resultado.status)
end

Realiza uma requisição HTTP POST.

Parâmetros:

  • url (string): URL do endpoint

  • body (string): Corpo da requisição (geralmente JSON ou dados de formulário)

  • headers (tabela, opcional): Cabeçalhos HTTP

  • options (tabela, opcional): Opções adicionais

Exemplo:

local dados_json = '{"nome": "Novo Usuário", "email": "usuario@exemplo.com"}'
local resultado = http.post("https://api.exemplo.com/usuarios",
dados_json,
{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer token123"
}
)
if resultado.status == 201 then
print("Usuário criado com sucesso!")
print("Resposta:", resultado.body)
else
print("Falha ao criar usuário. Status:", resultado.status)
end

Realiza uma requisição HTTP PUT para atualizar recursos.

Parâmetros:

  • url (string): URL do endpoint

  • body (string): Corpo da requisição com dados atualizados

  • headers (tabela, opcional): Cabeçalhos HTTP

  • options (tabela, opcional): Opções adicionais

Exemplo:

local dados_atualizados = '{"nome": "Usuário Atualizado", "ativo": true}'
local resultado = http.put("https://api.exemplo.com/usuarios/1",
dados_atualizados,
{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer token123"
}
)
if resultado.status == 200 then
print("Usuário atualizado com sucesso!")
else
print("Falha na atualização. Status:", resultado.status)
end

Realiza uma requisição HTTP DELETE para remover recursos.

Parâmetros:

  • url (string): URL do endpoint

  • body (string, opcional): Corpo da requisição (opcional para DELETE)

  • headers (tabela, opcional): Cabeçalhos HTTP

  • options (tabela, opcional): Opções adicionais

Exemplo:

local resultado = http.delete("https://api.exemplo.com/usuarios/1",
nil,
{["Authorization"] = "Bearer token123"}
)
if resultado.status == 204 then
print("Usuário removido com sucesso!")
else
print("Falha ao remover usuário. Status:", resultado.status)
end

Realiza uma requisição HTTP HEAD para obter apenas cabeçalhos.

Parâmetros:

  • url (string): URL do endpoint

  • body (string, opcional): Corpo da requisição

  • headers (tabela, opcional): Cabeçalhos HTTP

  • options (tabela, opcional): Opções adicionais

Exemplo:

local resultado = http.head("https://api.exemplo.com/usuarios/1",
nil,
{["Authorization"] = "Bearer token123"}
)
print("Status da verificação:", resultado.status)
-- A resposta HEAD geralmente não tem corpo

Se a URL não contiver um esquema (como http:// ou https://), o sistema automaticamente adiciona http:// como prefixo.

-- Estas duas chamadas são equivalentes:
local r1 = http.get("api.exemplo.com/dados")
local r2 = http.get("http://api.exemplo.com/dados")

Por padrão, a verificação de certificados SSL está habilitada. Para desabilitar (útil em ambientes de desenvolvimento/teste):

Atenção: Desabilitar a verificação SSL (verify = false) expõe a conexão a ataques “man-in-the-middle” e deve ser usado apenas em ambientes de desenvolvimento ou teste controlados. Nunca utilize esta opção em produção com servidores reais ou com dados sensíveis.

local resultado = get("https://servidor-local.com",
nil,
nil,
{verify = false}
)

É possível especificar um charset diferente para decodificar a resposta:

local resultado = get("https://api.exemplo.com/dados",
nil,
nil,
{charset = "iso-8859-1"}
)
-- Exemplo de monitoramento de API
function verificar_saude_api()
local resultado = http.get("https://api.exemplo.com/health",
nil,
{["User-Agent"] = "MonstaAgent/1.0"}
)
if resultado.status == 200 then
local dados = resultado.body
-- Processar resposta JSON se necessário
print("API está saudável")
return true
else
print("API com problemas. Status:", resultado.status)
return false
end
end