Pular para o conteúdo principal

Fazer uma requisição GET (http.get)

Declaração

código_HTTP, texto_JSON_dos_cabeçalhos, corpo = http.get(URL [, segundos_de_timeout, cabeçalhos, URL_NÃO_ESCAPADA ])

Declaração (parâmetros nomeados)

Aceito a partir de 20250625; parâmetros de progresso aceitos a partir de 20260402.

code_HTTP, texto_JSON_dos_cabeçalhos, corpo = http.get{
url = URL;
timeout = segundos_de_timeout;
headers = cabeçalhos;
params = parâmetros_de_Query;
download_file = caminho_para_salvar_o_corpo_em_caso_de_sucesso;
progress = função_de_callback_de_progresso;
progress_interval_ms = intervalo_do_callback_em_milissegundos;
}

Parâmetros

  • URL
    Texto; endereço URL a requisitar. Por padrão, este método aplica escape percentual à URL; se isso não for desejado, consulte a descrição do parâmetro URL NÃO ESCAPADA.
  • segundos de timeout
    Número real opcional; tempo limite da requisição, em segundos. O padrão é 10.
  • cabeçalhos
    Tabela opcional; cabeçalhos enviados na requisição, no formato \{field1 = value1, field2 = value2, ...\}; o padrão é \{\}.
  • parâmetros de Query
    Tabela opcional; parâmetros de Query enviados na requisição, no formato \{field1 = value1, field2 = value2, ...\}; o padrão é \{\}.
  • caminho para salvar o corpo em caso de sucesso
    Texto opcional; quando fornecido, o corpo retornado após o sucesso é salvo nesse caminho.
  • função de callback de progresso
    Função opcional, aceita a partir de 20260402. É chamada quando o progresso da requisição muda; seu primeiro argumento contém as informações de progresso atuais.
  • intervalo do callback em milissegundos
    Inteiro opcional, aceito a partir de 20260402. Controla o intervalo de disparo do callback de progresso, em milissegundos.
  • URL NÃO ESCAPADA
    Booleano opcional; true envia a URL diretamente, sem escape, e o padrão é false.
    Para aplicar escape personalizado à URL, consulte o módulo lcurl, easy:escape e easy:unescape.

Valores retornados

  • código de status HTTP
    Inteiro; código de status http da requisição atual. Retorna -1 quando a requisição excede o timeout.
  • texto JSON dos cabeçalhos retornados
    Texto ou nil; cabeçalhos retornados em formato JSON quando a requisição termina. Retorna nil em caso de timeout.
  • corpo retornado
    String ou nil; conteúdo retornado quando a requisição termina. Se o corpo for salvo em arquivo, este valor será o caminho do arquivo. Retorna nil em caso de timeout.

Descrição

Usa o método GET do protocolo HTTP/1.1 para obter um recurso de rede.
Esta função não armazena o recurso em disco; para baixar recursos de rede maiores, recomenda-se usar http.download.
Esta função pode ceder a execução; antes de retornar, outras threads podem ter a oportunidade de executar.
Se a versão do protocolo do servidor for HTTP/1.0 ou HTTP/0.9, use o método httpGet como alternativa.

corpo = httpGet(URL, segundos_de_timeout)

O callback de progresso recebe uma estrutura info como a seguinte:

{
count_of_bytes_sent = bytes_enviados;
count_of_bytes_expected_to_send = bytes_a_enviar_estimados;
count_of_bytes_received = bytes_recebidos;
count_of_bytes_expected_to_receive = bytes_a_receber_estimados;
}

Exemplo

local code, res_headers, body = http.get("https://httpbin.org/get?hello=world&你好=世界", 15, {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; -- simula uma requisição do IE8
["Cookie"] = "a=1; b=2; c=3"; -- envia também o Cookie
})
if code == 200 then -- se o código de status retornado for HTTP_OK
sys.alert(body)
end

Observação: o código acima usa a função sys.alert, que não pertence a este capítulo.

Exemplo (parâmetros nomeados)

local code, res_headers, body = http.get{
url = "https://httpbin.org/get";
timeout = 15;
headers = {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; -- simula uma requisição do IE8
["Cookie"] = "a=1; b=2; c=3"; -- envia também o Cookie
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
}
if code == 200 then -- se o código de status retornado for HTTP_OK
sys.alert(body)
end

Observação: o código acima usa a função sys.alert, que não pertence a este capítulo.

Exemplo de encapsulamento de http.get para obter o IP externo

function get_ip()
local done = false
thread.dispatch(function()
while (true) do
if (done) then
sys.toast("", -1)
return
else
sys.toast("正在获取 IP 地址...", device.front_orien())
end
sys.msleep(2000)
end
end)
while (true) do
local c, h, b = http.get("https://ip.chinaz.com/?ts="..tostring(sys.rnd()), 60)
if (c==200) then
sys.toast("", -1)
done = true
return b:match('您的本机IP地址:(%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?)')
end
end
end
--
-- copie o código acima para o início do seu script e use-o no script
sys.alert(get_ip())

Observação: o código acima usa as funções sys.alert, sys.toast, sys.msleep, sys.rnd, thread.dispatch e device.front_orien, que não pertencem a este capítulo.