- 40
- 23
Базовые HTTP запросы для выполнениях неблокирующих HTTP-запросов с обработкой ответов через функции обратного вызова (callbacks). Он поддерживает настройку параметров запроса (например, заголовки, таймауты, настройки SSL) и включает минимальный JSON-парсер для обработки ответов. Модуль потокобезопасен благодаря использованию mutex для выполнения калбэков в основном потоке Lua.
Основные преимущества:
Асинхронные запросы: Выполнение HTTP-запросов без блокировки Lua потока.
Настраиваемые параметры: Поддержка методов, заголовков, тела запроса, таймаутов, SSL и других опций.
Парсинг JSON: Встроенный минимальный JSON-парсер, поддерживающий объекты, массивы, строки, числа, булевы значения и null.
Потокобезопасность: Использование мьютекса для защиты очереди калбэков, и выполнения их в основном потоке.
Загрузка файлов: Поддержка multipart/form-data для отправки файлов на сервер.
Модуль предоставляет базовый набор параметров для настройки HTTP-запросов. Модуль извлекает следующие поля из таблицы:
используется для проверки на наличие ответов в очередях "queue". Таймаута встроенного нету, поэтому ответ может лежать хоть всю сессию скрипта. На остановке работы скрипта стоит вызвать
чтобы избежать утечек памяти.
Используется MSVC C++ 2015 года.
Требуется ОС минимум Windows 7 32-bit.
Для HTTP запросов используется libcurl.
Самая частая ошибка которую можно заметить "Не является приложением Win32". Для этого установите Visual C++ Redistributable х86 от 2022 до 2013 года.
Если не будет проблем с использованием, то расширю функционал библиотеки, в противном случае снесу эту тему. Source code будет немного позже.
Основные преимущества:
Асинхронные запросы: Выполнение HTTP-запросов без блокировки Lua потока.
Настраиваемые параметры: Поддержка методов, заголовков, тела запроса, таймаутов, SSL и других опций.
Парсинг JSON: Встроенный минимальный JSON-парсер, поддерживающий объекты, массивы, строки, числа, булевы значения и null.
Потокобезопасность: Использование мьютекса для защиты очереди калбэков, и выполнения их в основном потоке.
Загрузка файлов: Поддержка multipart/form-data для отправки файлов на сервер.
Модуль предоставляет базовый набор параметров для настройки HTTP-запросов. Модуль извлекает следующие поля из таблицы:
Поле | Описание |
---|---|
method | HTTP-метод (GET, POST, PUT, DELETE и др.) |
headers | Таблица HTTP-заголовков: { ["Content-Type"] = "application/json" } |
body | Тело запроса (например, JSON-строка) |
timeout | Таймаут в секундах |
follow_redirects | Следовать ли редиректам (true/false) |
proxy | Адрес прокси (http://proxy:8080) |
verify_ssl | Проверять SSL-сертификаты (true/false) |
ca_cert | Путь к CA-сертификату |
client_cert | Путь к клиентскому сертификату |
client_key | Путь к приватному ключу клиента |
query_params | Таблица для GET-параметров: { key1 = "value1" } |
files | Таблица файлов для отправки: { ["file"] = "path/to/file.txt" } |
Базовый пример использования:
local http = require("HTTP_ASYNC")
http.http_async_request("https://jsonplaceholder.typicode.com/posts/1", function(response)
if response.error then
print("Ошибка GET: " .. response.error)
else
print("GET Статус: " .. response.status)
print("GET Данные: ")
for key, value in pairs(response.data) do
print(key .. ": " .. tostring(value))
end
end
end, {
method = "GET",
headers = { ["Content-Type"] = "application/json" },
timeout = 10
})
http.http_async_request("https://jsonplaceholder.typicode.com/posts", function(response)
if response.error then
print("Ошибка POST: " .. response.error)
else
print("POST Статус: " .. response.status)
print("POST Данные: ")
for key, value in pairs(response.data) do
print(key .. ": " .. tostring(value))
end
end
end, {
method = "POST",
headers = { ["Content-Type"] = "application/json" },
body = '{"title":"foo","body":"bar","userId":1}',
timeout = 10
})
http.http_async_request("https://api.example.com", callback, {
method = "POST",
headers = {
["Content-Type"] = "application/json",
["Authorization"] = "Bearer token123"
},
body = '{"data":"test"}',
timeout = 15,
follow_redirects = true,
verify_ssl = true,
proxy = "http://proxy:8080",
ca_cert = "path/to/ca.pem",
client_cert = "path/to/client.pem",
client_key = "path/to/key.pem",
query_params = { key1 = "value1", key2 = "value2" },
files = { ["file"] = "path/to/file.txt" }
})
local running = true
while running do
http.http_async_process_callbacks()
end
function onScriptTerminate(script, quitGame)
if script == thisScript() then
http.http_async_cleanup()
end
end
Lua:
http.http_async_process_callbacks()
Lua:
http.http_async_clean()
Используется MSVC C++ 2015 года.
Требуется ОС минимум Windows 7 32-bit.
Для HTTP запросов используется libcurl.
Самая частая ошибка которую можно заметить "Не является приложением Win32". Для этого установите Visual C++ Redistributable х86 от 2022 до 2013 года.
Если не будет проблем с использованием, то расширю функционал библиотеки, в противном случае снесу эту тему. Source code будет немного позже.
🫢Что-то пошло не так? Я в домике