Гайд Асинхронные HTTP запросы через Lua C API

delanov

Участник
Автор темы
50
55
Пытаюсь отправить запрос через mimgui: в консоле пишет [ML] (script) test.lua: Lua_State = 0x01fd01c0 !
а callback вызывается только при выгрузке скрипта
Lua:
local httplib = require('HTTP_ASYNC')
local imgui = require("mimgui")
local encoding = require('encoding')
encoding.default = 'CP1251'
local u8 = encoding.UTF8

function main()
    while true do wait(1000)
        httplib.http_async_process_callbacks()
    end
end

function onScriptTerminate(LuaScript, quitGame)
    if LuaScript == thisScript() then
        httplib.http_async_cleanup()
    end
end

local success = nil

imgui.OnFrame(function() return not isPauseMenuActive() and not sampIsScoreboardOpen() end, function(self)
    imgui.Begin("her", nil, imgui.WindowFlags.AlwaysAutoResize)

    if imgui.Button("sumbit") then
        success = nil
        httplib.http_async_request("https://www.blast.hk/threads/234784/", function(response)
            print(response)
            if response.error then
                success = false
                print(response.error)
            else
                print("ААААААААААААААААХУЙ", response.status)
                success = true
            end
        end, {
            method = "GET",
            timeout = 5
        })
    end

    imgui.Text(success == nil and "wait" or (success and "success" or "not success"))

    imgui.End()
end)



Не получается скачать jpg, видимо с бинарными файлами работать не получится
Lua:
local http = require('HTTP_ASYNC')

function main()
    http.http_async_request("https://lea-script.tech/avatars/avatar_24_1749997478600.jpg", function(response)
        if response.error then
            print(response.error)
        else
            print("ААААААААААААААААХУЙ", response.status, response.data.raw)
            local f = io.open('moonloader/picture.jpg', "wb")
            if f then
                print('записан')
                f:write(response.data.raw)
                f:close()
            end
        end
    end, {
        method = "GET",
        timeout = 5,
        verify_ssl = false
    })

    while true do wait(0)
        http.http_async_process_callbacks()
    end
end

function onScriptTerminate(LuaScript, quitGame)
    if LuaScript == thisScript() then
        http.http_async_cleanup()
    end
end

Не помешало бы добавить headers в response

Json парсер такой себе: добавляет в каждой таблице ключ is_json
Он тут не так уж и необходим, когда в мунлоадере есть decodeJson

Похоже парсер json экранирует "\" из-за чего не работает перенос строки \n
Привет, пересмотрю работу плагина. Как исправлю - закину новую версию
 
  • Влюблен
Реакции: KyRDa

jjjokur

Известный
13
2
Либа пиздатая, вот только тоже проблема с GET запросом и url типа https://firebase-proj-rtdb.europe-west1.firebasedatabase.app/test/test.json (учитывая предыдущий отзыв с аризона вехиклес, я так предполагаю проблема в .json), пытался логировать так походу вообще в блок колбека не заходит
 
  • Нравится
Реакции: KyRDa

unknown~keykey

Новичок
1
0
[ML] (script) TestScript.lua: Lua_State = 0x204301c0 !
[ML] (script) TestScript.lua: Lua_State = 0x204301c0 !
[ML] (script) TestScript.lua: Lua_State = 0x204301c0 !


upd. Все работает, либа прикольная
 

Вложения

  • TestScript.lua
    2.8 KB · Просмотры: 2
Последнее редактирование:

delanov

Участник
Автор темы
50
55
HTTP_ASYNC 1.01

Изменения и исправления:


1. Убран JSON-парсер
2. Исправлена проблема перехвата ответов из за использования одной библиотеки в разных скриптах, либо же в разных потоках.

UPD: 18.09.25
3. Добавлены Headers в заголовках ответов
4. Добавлен параметр "on_progress" который отвечает за время загрузки сайта
5. Добавлены параметры use_cache = true, cache_ttl(int). Использовать кэш или нет и время кэша. (простыми словами чтобы не делать лишний запрос к сайту, библиотека из кэша возьмет уже). По умолчанию -- отключено
6. Переделан метод метатаблицы :cleanup
А в целом, разобрался с Lua State и Lua Thread, хотел привязывать все к скрипту но решил привязывать к метатаблице

Пример нового кода:

Пример нового кода:
local http = require("HTTP_ASYNC")

local client = http.new()


function request()
    local id = client:http_async_request("https://httpbin.org/get", function(resp)
        print("status", resp.status)
        print("data", resp.data)
        if resp.headers then
        for k,v in pairs(resp.headers) do print(k,v) end
        end
        if resp.progress then
        print("progress:", resp.progress)
        end
    end, { method = "GET", use_cache = true, cache_ttl = 120, on_progress = true })
   
    local ok = require("HTTP_ASYNC").cancel_request(id)
end

function main()
    lua_thread.create(request)
    while true do
        client:http_async_process_callbacks()
        wait(10)
    end
end

function onScriptTerminate(scr, quitGame)
    if scr == scr:thisScript() then
        client:cleanup()
    end
end
.
 

Вложения

  • HTTP_ASYNC.dll
    1.2 MB · Просмотры: 10
Последнее редактирование:

Tema05

Известный
1,613
533
Тюю, с внешним файлом, так ещё и калбеки из цикла. Давай без dllки, чисто через ffi.
 

kyrtion

Известный
1,321
485
о еще одна обнова с ответом headers

Не помешало бы добавить headers в response
порадуйся) кстати пожалуйста проверь на скачивание файлов, в том числе и .jpg для теста. ТС ток что вышел из личной проблемы и активизировался
 

KyRDa

Активный
116
70
о еще одна обнова с ответом headers


порадуйся) кстати пожалуйста проверь на скачивание файлов, в том числе и .jpg для теста. ТС ток что вышел из личной проблемы и активизировался
С картинками всё работает)
Вот такие headers отдаёт при отправке запроса с кэшем

1758299826044.png


о еще одна обнова с ответом headers


порадуйся) кстати пожалуйста проверь на скачивание файлов, в том числе и .jpg для теста. ТС ток что вышел из личной проблемы и активизировался
Я наебал, не заметил, что картинка из кэша по 304 коду бралась
Не работают бинарники, но зато headers есть
 
Последнее редактирование:
  • Нравится
Реакции: kyrtion