Недавно мне понадобилось организовать получение данных с помощью GET и POST запросов из Lua. На такую, казалось бы простую задачу, я потратил огромное количество своего времени, т.к. пришлось компилировать Curl для Lua самому.
Тем не менее мне удалось решить эту проблему и в этой статье я выложил готовую библиотеку, ее настройку, а также пример кода на Lua. Жаль, что этой статьи не было раньше. Надеюсь она сэкономит кому-то драгоценное время.
LuaSocket
Изначально у меня была специфическая задача. Мне нужно было использовать HTTP-запросы в торговом терминале QUIK (64 бита), который умеет выполнять код на Lua. Сперва я хотел воспользоваться готовой библиотекой LuaSocket. Я очень долго пытался заставить ее работать, перекачал, наверно, все возможные версии в интернете, но подружить ее с моим терминалом QUIK мне так и не удалось.
Lua-cURLv3
После десятков мучительных попыток, я решил оставить LuaSocket и использовать Curl для Lua. Заставить работать готовые библиотеки Curl (которых я смог найти в интернете от силы пару штук) для Lua в QUIK у меня также не получилось. Пришлось компилировать Curl из исходников самостоятельно, используя обертку для Lua, которая называется Lua-cURLv3.
Скачать готовый Curl и зависимые от него библиотеки (zlib и OpenSSL) вы можете по этой ссылке. Я компилировал Curl под версию lua-5.4. В связи с этим нужно проверить, что в настройках терминала Quik скрипты запускаются интерпретатором Lua именно этой версии (пример настроек ниже).

Чтобы установить библиотеку сделайте следующее:
- Разархивируйте архив и скиньте папки clibs и cURL, а также файл cURL.lua в корень папки с вашим QUIK’ом.
- Добавьте в переменную окружения Path вашей операционной системы папки clibs, cURL и папку с QUIK (если не знаете как это сделать — погуглите).
- После этого обязательно перезапустите QUIK.
Ниже расположены примеры кода на Lua для взаимодействия с библиотекой (можно запустить как через обычный интерпретатор Lua, так и через QUIK). Чтобы увидеть результат работы скрипта, скачайте программу DebugView (доступна для скачивания на сайте Microsoft).
Метод GET
package.cpath = ";;C:\\Open_Broker_QUIK\\clibs\\?.dll;C:\\Open_Broker_QUIK\\?.dll;"
package.path = ";;C:\\Open_Broker_QUIK\\?.lua;"
local curl = require("cURL")
local easy = curl.easy{
url = "https://jsonplaceholder.typicode.com/posts/1",
ssl_verifypeer = false,
ssl_verifyhost = false,
followlocation = true,
writefunction = function(buff) PrintDbgStr(buff) end
}
easy:perform()
PrintDbgStr(tostring(easy:getinfo(curl.INFO_RESPONSE_CODE)))
Метод POST
package.cpath = ";;C:\\Open_Broker_QUIK\\clibs\\?.dll;C:\\Open_Broker_QUIK\\?.dll;"
package.path = ";;C:\\Open_Broker_QUIK\\?.lua;"
local curl = require("cURL")
function main()
local easy = curl.easy{
url = "https://jsonplaceholder.typicode.com/posts",
ssl_verifypeer = false,
ssl_verifyhost = false,
followlocation = true,
post = false,
postfields = '{"key": "value"}',
httpheader = {"Content-Type: application/json"},
writefunction = function(buff) message(buff) end
}
easy:perform()
message(tostring(easy:getinfo(curl.INFO_RESPONSE_CODE)))
end
Надеюсь, информация из этой статьи вам помогла. 🙂