Перейти к основному содержимому

Выполнение GET-запроса (http.get)

Объявление

HTTP_код, JSON_текст_заголовков_ответа, тело_ответа = http.get(URL [, тайм-аут_в_секундах, заголовки_запроса, URL_без_ESCAPE ])

Объявление (именованные параметры)

Поддерживается с 20250625; параметры прогресса поддерживаются в версиях после 20260402

HTTP_код, JSON_текст_заголовков_ответа, тело_ответа = http.get{
url = URL;
timeout = тайм-аут_в_секундах;
headers = заголовки_запроса;
params = параметры_Query;
download_file = путь_для_сохранения_тела_успешного_ответа;
progress = функция_обратного_вызова_прогресса;
progress_interval_ms = интервал_прогресса_в_миллисекундах;
}

Параметры

  • URL
    Строка, адрес запрашиваемого URL; по умолчанию метод выполняет процентное escape-кодирование URL. Если это не нужно, см. описание параметра URL без ESCAPE
  • тайм-аут_в_секундах
    Вещественное число, необязательный параметр; время ожидания запроса в секундах, по умолчанию 10
  • заголовки_запроса
    Таблица, необязательный параметр; заголовки отправляемого запроса в формате {field1 = value1, field2 = value2, ...}, по умолчанию {}
  • параметры_Query
    Таблица, необязательный параметр; параметры Query отправляемого запроса в формате {field1 = value1, field2 = value2, ...}, по умолчанию {}
  • путь_для_сохранения_тела_успешного_ответа
    Строка, необязательный параметр; если указан, тело успешного ответа сохраняется по этому пути, который и возвращается
  • функция_обратного_вызова_прогресса
    Функция, необязательный параметр, поддерживается в версиях после 20260402. Вызывается при изменении прогресса запроса; первый параметр — текущая информация о прогрессе
  • интервал_прогресса_в_миллисекундах
    Целое число, необязательный параметр, поддерживается в версиях после 20260402. Задаёт интервал вызова обратного вызова прогресса в миллисекундах
  • URL без ESCAPE
    Логическое значение, необязательный параметр; true отправляет запрос без escape-кодирования URL, по умолчанию false
    Для пользовательского escape URL см. модуль lcurl, easy:escape и easy:unescape

Возвращаемое значение

  • HTTP-код
    Целое число, код HTTP текущего запроса; при тайм-ауте возвращает -1
  • JSON-текст заголовков ответа
    Строка или nil; после запроса возвращается информация о заголовках в формате JSON, при тайм-ауте — nil
  • тело ответа
    Строка или nil; содержимое ответа после завершения запроса. Если тело сохранено в файл, это путь к файлу; при тайм-ауте — nil

Описание

Запрашивает сетевой ресурс методом GET протокола HTTP/1.1.
Функция не сохраняет ресурс на диске; для загрузки больших сетевых ресурсов рекомендуется http.download.
Функция может уступить выполнение: до её возврата другие потоки могут получить возможность работать
Если версия протокола сервера — HTTP/1.0 или HTTP/0.9, используйте вместо неё метод httpGet.

тело_ответа = httpGet(URL, тайм-аут_в_секундах)

Структура info, передаваемая функции обратного вызова прогресса:

{
count_of_bytes_sent = число_отправленных_байт;
count_of_bytes_expected_to_send = ожидаемое_число_отправляемых_байт;
count_of_bytes_received = число_полученных_байт;
count_of_bytes_expected_to_receive = ожидаемое_число_получаемых_байт;
}

Пример

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)"; -- Имитация запроса IE8
["Cookie"] = "a=1; b=2; c=3"; -- Одновременно отправка Cookie
})
if code == 200 then -- Если возвращённый код — HTTP_OK
sys.alert(body)
end

Примечание: приведённый код использует функцию из другого раздела sys.alert

Пример (именованные параметры)

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)"; -- Имитация запроса IE8
["Cookie"] = "a=1; b=2; c=3"; -- Одновременно отправка Cookie
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
}
if code == 200 then -- Если возвращённый код — HTTP_OK
sys.alert(body)
end

Примечание: приведённый код использует функцию из другого раздела sys.alert

Пример обёртки http.get для получения внешнего IP

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
--
-- Скопируйте приведённый выше код в начало своего скрипта и используйте его в скрипте
sys.alert(get_ip())

Примечание: приведённый код использует функции из других разделов: sys.alert, sys.toast, sys.msleep, sys.rnd, thread.dispatch, device.front_orien.