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¶m2=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.