Перейти к основному содержимому

Интерфейс удалённого запуска скрипта

  • Описание интерфейса

    POST /spawn HTTP/1.1
    spawn_args: {"аргументы запуска скрипта":...}

    [текст скрипта]
  • Возможные ответы

    {"code":1,"message":"操作失败"}
    {"code":2,"message":"脚本有语法错误","detail":"конкретные сведения об ошибке"}
    {"code":3,"message":"已经有脚本正在运行中"}
    {"code":233,"message":"未知错误"}
  • Описание

    • [аргументы запуска скрипта] — печатаемая строка без символов перевода строки;
    • [текст скрипта] — содержимое скрипта, которое может быть текстом или зашифрованными двоичными данными;
    • на стороне скрипта аргументы запуска можно получить через proc_get или proc_take;
    • скрипт не сохраняется на устройстве как файл, а только выполняется;
    • исключение из предыдущего пункта: если на устройстве включён режим демона скриптов, устройство кэширует связанные с ним данные скрипта.
  • Пример

    Например, можно сформировать следующий запрос и отправить его на устройство:

    POST /spawn HTTP/1.1
    spawn_args: {"server_ip":"192.168.31.13","port":55555}
    Content-Length: 123

    local args = proc_get("spawn_args")
    args = json.decode(args)

    sys.alert("帐号服务器的 IP 为:"..args.server_ip.."\n 端口为:"..args.port)

    На устройстве появится диалоговое окно:

    IP-адрес сервера аккаунта: 192.168.31.13
    Порт: 55555
    • Реализация примера на Python (для Python 3.x):
    # -*- coding: utf-8 -*-

    import http.client
    import json

    spawn_args = {
    "server_ip": "192.168.31.13", # IP-адрес компьютера
    "port": 55555, # Порт компьютера
    }

    data = r'''
    local args = proc_get("spawn_args")
    args = json.decode(args)
    sys.alert("帐号服务器的 IP 为:"..args.server_ip.."\n 端口为:"..args.port)
    '''

    headers = {
    "Content-type": "text/lua",
    "spawn_args": json.dumps(spawn_args),
    }

    conn = http.client.HTTPConnection("192.168.31.72:46952") # Адрес и порт устройства
    conn.request("POST", "/spawn", data.encode('utf-8'), headers) # Кодировать data в UTF-8

    response = conn.getresponse()
    print(response.status, response.reason) # Использовать функцию print()

    data = response.read()
    print(data.decode('utf-8')) # Декодировать ответ и вывести его через print()

    conn.close()