Неактуально Copas Invalid argument

NyashMyash99

Известный
Автор темы
67
110
Версия MoonLoader
.026-beta
Решил перейти с Requests и Effil, на Copas и посыпались проблемы: не получается отправить запрос, пробовал как версию из туториала от FYP, так и разные версии своего кода - итог один.

Lua:
local copas = require 'copas'
local http = require 'copas.http'

--- @param method string
--- @param url string
--- @param data table request body for POST requests
--- @param callback function returns status code, response data, error
function NMLibrary.request(method, url, data, callback)
    -- start polling task
    if not copas.running then
        copas.running = true

        lua_thread.create(function()
            -- check success of assignment and handle errors if they occur
            while not copas.finished() do
                local success, exception = copas.step(0)
                if success == nil then error(exception) end
                wait(0)
            end

            copas.running = false
        end)
    end

    return copas.addthread(function()
        -- catch errors
        copas.setErrorHandler(function(err)
            print('Error handler: ' .. tostring(err))
            callback(nil, nil, err)
        end)

        print('URL: ' .. tostring(url))
        print('Data: ' .. tostring(data))

        -- send request
        local response, statusCode = http.request(url, data)
        print('Response: ' .. tostring(response))
        print('Code: ' .. tostring(statusCode))

        -- process response
        if type(statusCode) == 'number' then
            callback(decodeJson(response), statusCode)
        else
            callback(nil, nil, statusCode)
        end
    end)
end

[12:10:57.146020] URL: https://arizona.nyashmyash99.ru/files/autocar/update.json
[12:10:57.147019] Data: nil
[12:10:57.173136] Response: nil
[12:10:57.173136] Invalid argument

Пример с кодом от FYP:
Функция:
function NMLibrary.httpRequest(request, body, handler)
    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
    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

Как вызываю:
NMLibrary.httpRequest('https://arizona.nyashmyash99.ru/files/autocar/update.json', nil, function(request, err)
    print('FYP: ' .. tostring(request))
    print('FYP: ' .. tostring(err))
end)

FYP: nil
FYP: Invalid argument

Версии библиотек:
Copas - https://github.com/lunarmodules/copas/releases/tag/4.7.0
Coxpcall - https://github.com/keplerproject/coxpcall/releases/tag/v1_17_0
BinaryHeap - https://github.com/Tieske/binaryheap.lua/releases/tag/version_0v4
TimerWheel - https://github.com/Tieske/timerwheel.lua/releases/tag/1.0.2
 
Последнее редактирование:
  • Bug
Реакции: Tema05
Решение
Решил перейти с Requests и Effil, на Copas и посыпались проблемы: не получается отправить запрос, пробовал как версию из туториала от FYP, так и разные версии своего кода - итог один.

Lua:
local copas = require 'copas'
local http = require 'copas.http'

--- @param method string
--- @param url string
--- @param data table request body for POST requests
--- @param callback function returns status code, response data, error
function NMLibrary.request(method, url, data, callback)
    -- start polling task
    if not copas.running then
        copas.running = true

        lua_thread.create(function()
            -- check success of assignment and handle errors if they occur
            while not copas.finished()...

Tema05

Известный
1,441
401
Решил перейти с Requests и Effil, на Copas и посыпались проблемы: не получается отправить запрос, пробовал как версию из туториала от FYP, так и разные версии своего кода - итог один.

Lua:
local copas = require 'copas'
local http = require 'copas.http'

--- @param method string
--- @param url string
--- @param data table request body for POST requests
--- @param callback function returns status code, response data, error
function NMLibrary.request(method, url, data, callback)
    -- start polling task
    if not copas.running then
        copas.running = true

        lua_thread.create(function()
            -- check success of assignment and handle errors if they occur
            while not copas.finished() do
                local success, exception = copas.step(0)
                if success == nil then error(exception) end
                wait(0)
            end

            copas.running = false
        end)
    end

    return copas.addthread(function()
        -- catch errors
        copas.setErrorHandler(function(err)
            print('Error handler: ' .. tostring(err))
            callback(nil, nil, err)
        end)

        print('URL: ' .. tostring(url))
        print('Data: ' .. tostring(data))

        -- send request
        local response, statusCode = http.request(url, data)
        print('Response: ' .. tostring(response))
        print('Code: ' .. tostring(statusCode))

        -- process response
        if type(statusCode) == 'number' then
            callback(decodeJson(response), statusCode)
        else
            callback(nil, nil, statusCode)
        end
    end)
end

[12:10:57.146020] URL: https://arizona.nyashmyash99.ru/files/autocar/update.json
[12:10:57.147019] Data: nil
[12:10:57.173136] Response: nil
[12:10:57.173136] Invalid argument

Пример с кодом от FYP:
Функция:
function NMLibrary.httpRequest(request, body, handler)
    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
    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

Как вызываю:
NMLibrary.httpRequest('https://arizona.nyashmyash99.ru/files/autocar/update.json', nil, function(request, err)
    print('FYP: ' .. tostring(request))
    print('FYP: ' .. tostring(err))
end)

FYP: nil
FYP: Invalid argument

Версии библиотек:
Copas - https://github.com/lunarmodules/copas/releases/tag/4.7.0
Coxpcall - https://github.com/keplerproject/coxpcall/releases/tag/v1_17_0
BinaryHeap - https://github.com/Tieske/binaryheap.lua/releases/tag/version_0v4
TimerWheel - https://github.com/Tieske/timerwheel.lua/releases/tag/1.0.2
Я сначала подумал раз пишет про аргументы значит проблема в них. Ну решил проверить прежде чем писать. И ахуел ведь действительно у меня точно такая же ошибка вылазит. Посмотрел что у тебя в функции калбека всего 2 аргумента request, err. А в примере фипа response, code, headers, status их 4. Подумал что всё решил проблему. Но хуй там. Дело не в этих аргументах и они не обязательные.
Решил попробовать какую-нибудь проверенную ссылку. Взял https://speller.yandex.net/services/spellservice.json/checkText из моего скрипта с коррекцией. И с неё всё норм пришёл ответ. Ну значит проблема на стороне хоста. Он не хочет работать с сформированным копасом запросом. Всё подумал я, проблема найдена.

Но стало интересно причём тут вообще какие-то аргументы в ошибке. Это же не сервер возвращает ответ с таким текстом. Подумал сразу, что у меня почему-то не было такого раньше. Наверное тот набор либов, что у меня сейчас отличается. Подставил старые либы из подкачки того рабочего скрипта и нихуя. Ну подумал дело в moonloader. Взял с своего установщика и тоже самое. Решил в общем всё тоже самое провернуть на чистой сборке. И хуяк ловлю краш при тех же файлах и условиях. Уже что-то новенькое - прогресс. А потом сверяя файлы понимаю, что лаунчер насильно перезаписывает bass.dll, vorbis.dll, vorbisFile.dll.

В этом месте собственно тебе обасрал всю малину лаунчер, который скрыл от тебя подробности краша из-за изменённых файлов. Наверное в этом есть смысл ведь благодаря этому скрипт не крашился, а просто запрос завершался с ошибкой. На сборке у меня вместо сообщения об ошибочном запросе скрипт нахрен крашится с ошибкой ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:43: ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:43: ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:685: sslv3 alert handshake failure И тут то мы уже видим нормальный подробный краш. "sslv3 alert handshake failure" это ошибка ssl сертификата и по идеи сама либа тут не причём.

Ищу в инете "copas.lua sslv3 alert handshake failure". Нахожу 1 упоминание на бластхаке https://www.blast.hk/threads/84068 Там автор пишет, что дело в том что сайт накрыт cloudflare. Ну наверное не должно быть так, чтобы из-за этого скрипт не работал. Далее нахожу упоминание ошибки в официальном гитхаб этой либы https://github.com/lunarmodules/copas/issues/115 Там у человека такая же проблема с cloudflare и разраб либы отвечает, что пофиксил это. Качаем версию с фиксом и накатываем на сборку. Таааадааа! Теперь и твой сайт возвращает ответ
Screenshot_77.png


UPD: Скопировал целиком весь moonloader на лаунчер, но всё равно не заработало на нём. Переебал себе весь мозг запускаю игру батником всё же подменяя те dll. Игра запустилась, но не стартует самп. Следовательно скрипт просто не работает. Но потом всё же смог чудом 1 раз успешно выполнить запрос. Начал копать и понял, что запрос выполняется на лаунчере только при 2 условиях. 1) сам запрос должен быть вне любой функции включая main. 2) запрос выполняется успешно только при 1 загрузке скрипта с стартом moonloader. Видимо всё работает до того как что-то погрузилось. Скорее всего до запуска любым скриптом main(). Причём всё работает на сайтах не накрытых cloudflare не смотря на то, что был установлен фикс и он работает в той же конфигурации на сборке. Подменять файлы до посинения не представляется возможность так как лаунчер тупо не запустится или же придётся по цепочке подменять всё, но тогда уже смысл от него. Проще уже на сборку пересесть.

Так что или юзаем сборку и copas с фиксом или не делаем запросы к сайтам накрытым cloudflare. Первый вариант уже не реален в нынешние времена. Второй это фигня, ведь как минимум гитхаб накрыт им. Ну или фиксить что-то на уровне библиотеки, ведь с другими либами как я понял нет проблем. Связи с этим прошу прощение у автора за то что так наседал со своим copas. У меня тоже не получилось заставить его полноценно работать на лаунчере.

Вывод: Разрабы лаунчера подарасы. Как обычно одно и то же на сборке работает, а на их лаунчере нет)

А вообще если тебе не нужно отправлять на сервер информацию (как я понял), а нужно только получать с сервера. Тем более json. Нахуй тут не нужны эти https запросы. Понтов ради. Юзай downloadUrlToFile и не парься. Проблем в 100 раз меньше.
 
Последнее редактирование:
  • Вау
Реакции: NyashMyash99 и ChromiusJ

NyashMyash99

Известный
Автор темы
67
110
Я сначала подумал раз пишет про аргументы значит проблема в них. Ну решил проверить прежде чем писать. И ахуел ведь действительно у меня точно такая же ошибка вылазит. Посмотрел что у тебя в функции калбека всего 2 аргумента request, err. А в примере фипа response, code, headers, status их 4. Подумал что всё решил проблему. Но хуй там. Дело не в этих аргументах и они не обязательные.
Решил попробовать какую-нибудь проверенную ссылку. Взял https://speller.yandex.net/services/spellservice.json/checkText из моего скрипта с коррекцией. И с неё всё норм пришёл ответ. Ну значит проблема на стороне хоста. Он не хочет работать с сформированным копасом запросом. Всё подумал я, проблема найдена.

Но стало интересно причём тут вообще какие-то аргументы в ошибке. Это же не сервер возвращает ответ с таким текстом. Подумал сразу, что у меня почему-то не было такого раньше. Наверное тот набор либов, что у меня сейчас отличается. Подставил старые либы из подкачки того рабочего скрипта и нихуя. Ну подумал дело в moonloader. Взял с своего установщика и тоже самое. Решил в общем всё тоже самое провернуть на чистой сборке. И хуяк ловлю краш при тех же файлах и условиях. Уже что-то новенькое - прогресс. А потом сверяя файлы понимаю, что лаунчер насильно перезаписывает bass.dll, vorbis.dll, vorbisFile.dll.

В этом месте собственно тебе обасрал всю малину лаунчер, который скрыл от тебя подробности краша из-за изменённых файлов. Наверное в этом есть смысл ведь благодаря этому скрипт не крашился, а просто запрос завершался с ошибкой. На сборке у меня вместо сообщения об ошибочном запросе скрипт нахрен крашится с ошибкой ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:43: ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:43: ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:685: sslv3 alert handshake failure И тут то мы уже видим нормальный подробный краш. "sslv3 alert handshake failure" это ошибка ssl сертификата и по идеи сама либа тут не причём.

Ищу в инете "copas.lua sslv3 alert handshake failure". Нахожу 1 упоминание на бластхаке https://www.blast.hk/threads/84068 Там автор пишет, что дело в том что сайт накрыт cloudflare. Ну наверное не должно быть так, чтобы из-за этого скрипт не работал. Далее нахожу упоминание ошибки в официальном гитхаб этой либы https://github.com/lunarmodules/copas/issues/115 Там у человека такая же проблема с cloudflare и разраб либы отвечает, что пофиксил это. Качаем версию с фиксом и накатываем на сборку. Таааадааа! Теперь и твой сайт возвращает ответ
Посмотреть вложение 220547

UPD: Скопировал целиком весь moonloader на лаунчер, но всё равно не заработало на нём. Переебал себе весь мозг запускаю игру батником всё же подменяя те dll. Игра запустилась, но не стартует самп. Следовательно скрипт просто не работает. Но потом всё же смог чудом 1 раз успешно выполнить запрос. Начал копать и понял, что запрос выполняется на лаунчере только при 2 условиях. 1) сам запрос должен быть вне любой функции включая main. 2) запрос выполняется успешно только при 1 загрузке скрипта с стартом moonloader. Видимо всё работает до того как что-то погрузилось. Скорее всего до запуска любым скриптом main(). Причём всё работает на сайтах не накрытых cloudflare не смотря на то, что был установлен фикс и он работает в той же конфигурации на сборке. Подменять файлы до посинения не представляется возможность так как лаунчер тупо не запустится или же придётся по цепочке подменять всё, но тогда уже смысл от него. Проще уже на сборку пересесть.

Так что или юзаем сборку и copas с фиксом или не делаем запросы к сайтам накрытым cloudflare. Первый вариант уже не реален в нынешние времена. Второй это фигня, ведь как минимум гитхаб накрыт им. Ну или фиксить что-то на уровне библиотеки, ведь с другими либами как я понял нет проблем. Связи с этим прошу прощение у автора за то что так наседал со своим copas. У меня тоже не получилось заставить его полноценно работать на лаунчере.

Вывод: Разрабы лаунчера подарасы. Как обычно одно и то же на сборке работает, а на их лаунчере нет)

А вообще если тебе не нужно отправлять на сервер информацию (как я понял), а нужно только получать с сервера. Тем более json. Нахуй тут не нужны эти https запросы. Понтов ради. Юзай downloadUrlToFile и не парься. Проблем в 100 раз меньше.

Благодарю за такую фантастически проделанную работу, объём сделанного действительно ничего кроме ВАУ не вызывает)

Данные я посылаю в локальных скриптах ( связь организации с Дискордом например ), поэтому функцию придётся оставить, но не думаю, что это сильно помешает пользователям публичных скриптов. В любом случае, о проблемах я почитал, будем надеется, что не столкнусь с ними.
 
  • Нравится
Реакции: Tema05

четыреста четыре

Известный
120
19
Я сначала подумал раз пишет про аргументы значит проблема в них. Ну решил проверить прежде чем писать. И ахуел ведь действительно у меня точно такая же ошибка вылазит. Посмотрел что у тебя в функции калбека всего 2 аргумента request, err. А в примере фипа response, code, headers, status их 4. Подумал что всё решил проблему. Но хуй там. Дело не в этих аргументах и они не обязательные.
Решил попробовать какую-нибудь проверенную ссылку. Взял https://speller.yandex.net/services/spellservice.json/checkText из моего скрипта с коррекцией. И с неё всё норм пришёл ответ. Ну значит проблема на стороне хоста. Он не хочет работать с сформированным копасом запросом. Всё подумал я, проблема найдена.

Но стало интересно причём тут вообще какие-то аргументы в ошибке. Это же не сервер возвращает ответ с таким текстом. Подумал сразу, что у меня почему-то не было такого раньше. Наверное тот набор либов, что у меня сейчас отличается. Подставил старые либы из подкачки того рабочего скрипта и нихуя. Ну подумал дело в moonloader. Взял с своего установщика и тоже самое. Решил в общем всё тоже самое провернуть на чистой сборке. И хуяк ловлю краш при тех же файлах и условиях. Уже что-то новенькое - прогресс. А потом сверяя файлы понимаю, что лаунчер насильно перезаписывает bass.dll, vorbis.dll, vorbisFile.dll.

В этом месте собственно тебе обасрал всю малину лаунчер, который скрыл от тебя подробности краша из-за изменённых файлов. Наверное в этом есть смысл ведь благодаря этому скрипт не крашился, а просто запрос завершался с ошибкой. На сборке у меня вместо сообщения об ошибочном запросе скрипт нахрен крашится с ошибкой ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:43: ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:43: ...\Local\Programs\GTA San Andreas\moonloader\lib\copas.lua:685: sslv3 alert handshake failure И тут то мы уже видим нормальный подробный краш. "sslv3 alert handshake failure" это ошибка ssl сертификата и по идеи сама либа тут не причём.

Ищу в инете "copas.lua sslv3 alert handshake failure". Нахожу 1 упоминание на бластхаке https://www.blast.hk/threads/84068 Там автор пишет, что дело в том что сайт накрыт cloudflare. Ну наверное не должно быть так, чтобы из-за этого скрипт не работал. Далее нахожу упоминание ошибки в официальном гитхаб этой либы https://github.com/lunarmodules/copas/issues/115 Там у человека такая же проблема с cloudflare и разраб либы отвечает, что пофиксил это. Качаем версию с фиксом и накатываем на сборку. Таааадааа! Теперь и твой сайт возвращает ответ
Посмотреть вложение 220547

UPD: Скопировал целиком весь moonloader на лаунчер, но всё равно не заработало на нём. Переебал себе весь мозг запускаю игру батником всё же подменяя те dll. Игра запустилась, но не стартует самп. Следовательно скрипт просто не работает. Но потом всё же смог чудом 1 раз успешно выполнить запрос. Начал копать и понял, что запрос выполняется на лаунчере только при 2 условиях. 1) сам запрос должен быть вне любой функции включая main. 2) запрос выполняется успешно только при 1 загрузке скрипта с стартом moonloader. Видимо всё работает до того как что-то погрузилось. Скорее всего до запуска любым скриптом main(). Причём всё работает на сайтах не накрытых cloudflare не смотря на то, что был установлен фикс и он работает в той же конфигурации на сборке. Подменять файлы до посинения не представляется возможность так как лаунчер тупо не запустится или же придётся по цепочке подменять всё, но тогда уже смысл от него. Проще уже на сборку пересесть.

Так что или юзаем сборку и copas с фиксом или не делаем запросы к сайтам накрытым cloudflare. Первый вариант уже не реален в нынешние времена. Второй это фигня, ведь как минимум гитхаб накрыт им. Ну или фиксить что-то на уровне библиотеки, ведь с другими либами как я понял нет проблем. Связи с этим прошу прощение у автора за то что так наседал со своим copas. У меня тоже не получилось заставить его полноценно работать на лаунчере.

Вывод: Разрабы лаунчера подарасы. Как обычно одно и то же на сборке работает, а на их лаунчере нет)

А вообще если тебе не нужно отправлять на сервер информацию (как я понял), а нужно только получать с сервера. Тем более json. Нахуй тут не нужны эти https запросы. Понтов ради. Юзай downloadUrlToFile и не парься. Проблем в 100 раз меньше.
тема со сборкой и одним успешным запрсом появляется сейчас у меня, сборка у меня дефолтная, копас новый стоит, оно тупо ебёт мне мозг с той же ошибкой инвалид аргумент

тема со сборкой и одним успешным запрсом появляется сейчас у меня, сборка у меня дефолтная, копас новый стоит, оно тупо ебёт мне мозг с той же ошибкой инвалид аргумент
придется остаться на effil с его крашами
 

Tema05

Известный
1,441
401
Да, пришлось к тому же прийти. Меня пока вроде не крашило ни разу из-за этого, но всё таки.
Или идём кроем хуями мастерскую аризоны, чтобы копас починили на лаунчере)

Я позже выяснил, что лаунчер обращается к cloudflare. Резонно предположить что проблема возникает в этом месте.
 

четыреста четыре

Известный
120
19
Или идём кроем хуями мастерскую аризоны, чтобы копас починили на лаунчере)

Я позже выяснил, что лаунчер обращается к cloudflare. Резонно предположить что проблема возникает в этом месте.
лаунчер аризоны не причём, у меня на обычной сборке запрос отрабатывается хуй знает при каких условиях

это копас карапченный навреное