1

ここに来るのは初めてで、フォーラムに参加することを考えました。なぜなら、私は Lua プログラミングが初めてで、HTTP Post メソッドをほとんどあきらめていたからです。

ESP8266(NodeMCUで実行)を使用してIOTを試し、ESPloreを使用してLuaプログラムをESP8266に送信しています。

したがって、私のプログラムの目的は、API を呼び出し、ESP8266 で実行されている Lua プログラムを使用していくつかのパラメーターをポストすることです。

私は次のアプローチを試しました -

1.HTTP ポストの使用

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 の場合、私のコードの問題は何ですか。
b. Luasocket の場合、ラップトップでコンパイラを使用していないため、ESP8266 に送信するにはどうすればよいですか。

4

1 に答える 1

0

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

何が悪いのかわかりません。

HTTP では、ヘッダーは常に で区切られ\r\n\r\nます。2 番目の CR-LF ペアがない場合、Tomcat で報告されたように、次のデータはヘッダー エラーを引き起こします。

次に、ESP8266 では標準のソケット ライブラリを使用できません。Espressif SDK の nodemcu ラッパーであるネット ライブラリを使用する必要があります。

于 2015-10-11T20:31:45.577 に答える