HTTP-запрос из Lua через Curl (в т.ч. для QUIK): методы GET и POST, как сделать

Недавно мне понадобилось организовать получение данных с помощью 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 именно этой версии (пример настроек ниже).

Настройки версии Lua в терминале QUIK

Чтобы установить библиотеку сделайте следующее:

  1. Разархивируйте архив и скиньте папки clibs и cURL, а также файл cURL.lua в корень папки с вашим QUIK’ом.
  2. Добавьте в переменную окружения Path вашей операционной системы папки clibs, cURL и папку с QUIK (если не знаете как это сделать — погуглите).
  3. После этого обязательно перезапустите 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

Надеюсь, информация из этой статьи вам помогла. 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *