Get запрос в 0.27 и 0.26

Belo4ka_belka1

Участник
Автор темы
31
0
Версия MoonLoader
Другое
Здравствуйте, вопрос. Пытаюсь освоить http, взял код с примера в теме и пробую: на 0.27 работает, сайты откликаются-отзываются. А 0.26 ошибки. При одном и том же коде. Что такого есть в 0.27 что сайту нравится когда он обращается к нему?
Код:
local copas = require 'copas'
local http = require 'copas.http'

function httpRequest(request, body, handler) -- copas.http
    -- start polling task
    if not copas.running then
        copas.running = true
        lua_thread.create(function()
            wait(0)
            while not copas.finished() do
                local ok, err = copas.step(0)
                if ok == nil then error(err) end
                wait(0)
            end
            copas.running = false
        end)
    end
    -- do request
    if handler then
        return copas.addthread(function(r, b, h)
            copas.setErrorHandler(function(err) h(nil, err) end)
            h(http.request(r, b))
        end, request, body, handler)
    else
        local results
        local thread = copas.addthread(function(r, b)
            copas.setErrorHandler(function(err) results = {nil, err} end)
            results = table.pack(http.request(r, b))
        end, request, body)
        while coroutine.status(thread) ~= 'dead' do wait(0) end
        return table.unpack(results)
    end
end

lua_thread.create(function()
    local list = {
        "https://script.google.com/macros/s/AKfycbwT8VM8moTSJzWRwPP60p0uou4xNCbDS1hyP3mkL5wpKn9pwGqm/exec?name=123&text=123",
    } -- 0,27: OK HTTP 1.1; 0,26: Error Invalid argument

    -- последовательные запросы, обработаются друг за другом
    print('{fffafa}sequential')
    for i, url in ipairs(list) do
        print('{fffafa}request' .. url .. '')
        local response, code, headers, status = httpRequest(url)
        if response then
            print('{fffafa}' .. url .. ' OK' .. status .. '')
        else
            print('{fffafa}' .. url .. ' Error' .. code .. '')
        end
    end
end)

function main() while true do wait(0) end end
 

Belo4ka_belka1

Участник
Автор темы
31
0
Библиотека
Lua:
local requests = require'requests'
response = requests.get('твой_сайт')
print(response.text)
Спасибо, установил, попробовал, запрос доходит до сайта. Но как все это дело использовать теперь чтобы игра не висла пока запрос идёт? Простой луа-поток не помогает, пример с темы про асинхрон тоже не работает: игра сразу же закрывается без ошибок:

Код:
local copas = require 'copas'
local http = require 'copas.http'
local requests = require 'requests'
local ev = require 'lib.samp.events'

function ev.onSendGiveDamage(playerId, damage, weapid, bodypart)
    lua_thread.create(function()
        local response, err = httpRequest('GET', "https://script.google.com/macros/s/AKfycbwT8VM8moTSJzWRwPP60p0uou4xNCbDS1hyP3mkL5wpKn9pwGqm/exec?name=123&text=" .. damage .. "; " .. playerId .. "")
        if err then error(err) end
        print(response.text)
    end)
end

function httpRequest(method, request, args, handler) -- lua-requests
    -- start polling task
    if not copas.running then
        copas.running = true
        lua_thread.create(function()
            wait(0)
            while not copas.finished() do
                local ok, err = copas.step(0)
                if ok == nil then error(err) end
                wait(0)
            end
            copas.running = false
        end)
    end
    -- do request
    if handler then
        return copas.addthread(function(m, r, a, h)
            copas.setErrorHandler(function(err) h(nil, err) end)
            h(requests.request(m, r, a))
        end, method, request, args, handler)
    else
        local results
        local thread = copas.addthread(function(m, r, a)
            copas.setErrorHandler(function(err) results = {nil, err} end)
            results = table.pack(requests.request(m, r, a))
        end, method, request, args)
        while coroutine.status(thread) ~= 'dead' do wait(0) end
        return table.unpack(results)
    end
end

function main() while true do wait(0) end end

Я не собираюсь конечно использовать запросы в таких частых колбэках и так часто в принципе. Но у меня бывает за единицу времени много-много разных запросов отправляется и игра уходит в закат, а такой тест поможет проверить стабильность в этом плане. Данный код приводит игру к вылету при первом же попадании, причем запрос так и не дошел до сайта. Где ошибки?
 

Belo4ka_belka1

Участник
Автор темы
31
0
Попробуй сначала сделать вопрос вне события OnGiveTakeDamage
Я пытался и вне. И даже код, указанный в примере Quasper'ом приводит к вылету игры:
Код:
local requests = require 'requests'

function main() sampRegisterChatCommand("test", cmd_test) while true do wait(0) end end

function cmd_test()
    response = requests.get('https://script.google.com/macros/s/AKfycbwT8VM8moTSJzWRwPP60p0uou4xNCbDS1hyP3mkL5wpKn9pwGqm/exec?name=123&text=0; 123')
    print(response.text)
end