NodeMCU - Lua - HTTP Post или luasocket - нужно руководство

Я впервые здесь и подумал присоединиться к форуму, потому что я новичок в программировании на Lua и почти отказался от метода HTTP Post.

Я пробую свои силы на IOT, используя ESP8266 (работает на NodeMCU) и использую ESPlore для отправки программы Lua на ESP8266.

Итак, цель моей программы - вызвать API и опубликовать несколько параметров, используя мою программу Lua, работающую на ESP8266.

Я попробовал следующие подходы -

1. Использование HTTP Post

conn=net.createConnection(net.TCP, 0)  
conn:on("receive", display) 
conn:connect(80,HOST)  
conn:on("connection",function(obj) 
   local post_request = build_post_request(HOST,URI)
   obj:send(post_request)
end

---- функция, как показано ниже ------------------------------------------- ---------

function build_post_request(host, uri)
    local data = ""
    data = "param1=1&param2=2" 
    request = "POST uri HTTP/1.1\r\n"..
      "Host: example.com\r\n"..
      "apiKey: e2sss3af-9ssd-43b0-bfdd-24a1dssssc46\r\n"..
      "Cache-Control: no-cache\r\n"..
      "Content-Type: application/x-www-form-urlencoded\r\n"..data
    return request
end

----------------Отклик --------------------------------- -----

HTTP/1.1 400 Bad Request
Date: Sun, 11 Oct 2015 16:10:55 GMT
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 968
Connection: close

Apache Tomcat / 7.0.54 - Сообщение об ошибке
Запрос, отправленный клиентом, был синтаксически неверным.

Я не понимаю, что с ним не так.

2. Использование Luasocket

Я включил следующие в моей программе -

local http = require"socket.http"
local ltn12 = require"ltn12"

и он выбрасывает следующие ошибки

script1.lua:3: module 'socket.http' not found:
no field package.preload['socket.http']
no file 'socket/http.lc'
no file 'socket/http.lua'

Я не знаю, как получить эти библиотеки и отправить их на ESP8266, и не уверен, что этого будет достаточно.


Вопрос:

Какой метод является лучшим для отправки данных на сервер с помощью API.
а. Если HTTP Post, в чем проблема с моим кодом.
б. Если Luasocket, то как мне отправить его на ESP8266, поскольку я не использую компилятор на своем ноутбуке.

1 ответ

"Content-Type: application/x-www-form-urlencoded\r\n"..data

Я не понимаю, что с ним не так.

В HTTP заголовки всегда отделяются \r\n\r\n, Без второй пары CR-LF следующие данные вызывают ошибку заголовка, как сообщается dy Tomcat.

Во-вторых, вы не можете использовать стандартные библиотеки сокетов на ESP8266. Вы должны использовать сетевую библиотеку, которая является оболочкой nodemcu вокруг Espressif SDK.

Другие вопросы по тегам