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ções Disponíveis
Seção intitulada “Funções Disponíveis”http.request(method, url, body, headers, options)
Seção intitulada “http.request(method, url, body, headers, options)”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)http.get(url, body, headers, options)
Seção intitulada “http.get(url, body, headers, options)”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)endhttp.post(url, body, headers, options)
Seção intitulada “http.post(url, body, headers, options)”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)endhttp.put(url, body, headers, options)
Seção intitulada “http.put(url, body, headers, options)”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)endhttp.delete(url, body, headers, options)
Seção intitulada “http.delete(url, body, headers, options)”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)endhttp.head(url, body, headers, options)
Seção intitulada “http.head(url, body, headers, options)”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 corpoInformações Adicionais
Seção intitulada “Informações Adicionais”URL Automática
Seção intitulada “URL Automática”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")Verificação SSL
Seção intitulada “Verificação SSL”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})Charsets
Seção intitulada “Charsets”É 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 Uso
Seção intitulada “Exemplo de Uso”-- Exemplo de monitoramento de APIfunction 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 endend