Pular para o conteúdo

fetchRemote

Compartilhada HTTP e JSON

Faz uma requisição HTTP e entrega a resposta a um callback.

Existem duas formas de chamar. A moderna, com uma tabela de opções:

bool fetchRemote ( string url, table opcoes, function callback [, table argumentosDoCallback ] )

E a forma posicional:

bool fetchRemote ( string url [, string fila, number tentativas = 10, number timeout = 10000 ], function callback [, string postData, bool postBinario = false, ... ] )
NomeTipoPadrãoDescrição
urlstring—Endereço completo, com o esquema (http:// ou https://).
opcoestable—Configuração da requisição, detalhada abaixo.
callbackfunction—Chamada quando a requisição termina. Obrigatória.
argumentosDoCallbacktable—Lista de valores repassados ao callback depois dos argumentos fixos.
filastring"default"Nome da fila. Requisições da mesma fila são feitas uma de cada vez.
tentativasnumber10Quantas vezes tentar conectar.
timeoutnumber10000Tempo limite de conexão, em milissegundos.
postDatastring""Corpo a enviar. Preenchê-lo transforma a requisição em um POST.
postBinarioboolfalsetrue se o corpo for binário.
...any—Valores repassados ao callback depois dos argumentos fixos.

Campos da tabela de opções

CampoTipoPadrãoDescrição
queueNamestring"default"Nome da fila.
connectionAttemptsnumber10Quantas vezes tentar conectar.
connectTimeoutnumber10000Tempo limite de conexão, em milissegundos.
methodstring""Método HTTP. Vazio significa GET, ou POST quando há postData.
postDatastring""Corpo da requisição.
postIsBinaryboolfalsetrue se o corpo for binário.
maxRedirectsnumber8Quantos redirecionamentos seguir.
usernamestring""Usuário para autenticação HTTP.
passwordstring""Senha para autenticação HTTP.
headerstable—Tabela de cabeçalhos, no formato ["Nome"] = "valor". Só pares de strings são enviados.

true se a requisição foi enfileirada. false, com o motivo no console de debug, se o callback estiver faltando ou não for uma função.

Argumentos do callback

Com a tabela de opções, o callback recebe:

PosiçãoDescrição
1Corpo da resposta, como string.
2Tabela com informações da resposta.
3 em dianteOs valores de argumentosDoCallback, na ordem.

A tabela de informações traz:

CampoDescrição
successtrue quando o servidor respondeu com um código entre 200 e 299.
statusCodeCódigo HTTP da resposta. 0 se o servidor nunca respondeu.
headersCabeçalhos da resposta, no formato ["Nome"] = "valor".

Na forma posicional, o callback recebe:

PosiçãoDescrição
1Corpo da resposta em caso de sucesso, ou a string "ERROR".
20 em caso de sucesso; senão o código HTTP, ou 1 se o servidor não foi alcançado.
3 em dianteOs argumentos extras que você passou, na ordem.
-- GET: lendo uma resposta em JSON
fetchRemote("https://api.exemplo.com/status", {}, function(corpo, info)
if not info.success then
outputDebugString("falha ao consultar a API: " .. info.statusCode, 1)
return
end
local dados = fromJSON(corpo)
if type(dados) ~= "table" then
outputDebugString("a API respondeu algo que não é JSON", 2)
return
end
outputDebugString("jogadores no site: " .. tostring(dados.online))
end)
-- POST: enviando JSON e repassando um jogador ao callback
function registrarEntrada(jogador)
local corpo = toJSON({
nome = getPlayerName(jogador),
hora = getRealTime().timestamp
})
fetchRemote("https://api.exemplo.com/entradas", {
method = "POST",
postData = corpo,
connectTimeout = 5000,
headers = {
["Content-Type"] = "application/json",
["Authorization"] = "Bearer " .. TOKEN
}
}, function(resposta, info, quem)
-- `quem` é o jogador que veio na tabela de argumentos abaixo
if not isElement(quem) then return end
if info.success then
outputDebugString("entrada registrada")
else
outputDebugString("entrada recusada (" .. info.statusCode .. "): " .. resposta, 2)
end
end, { jogador })
end
  • toJSON — Converte um valor Lua em texto JSON.
  • fromJSON — Lê um texto JSON e devolve os valores correspondentes.