2017-05-04 2 views
0

Luaを使用しているESP8266 WiFiモジュールを使用してページからデータを取得しようとしている間にペイロードがゼロになっています。ESP8266のサーバーページへのGET要求後の空のペイロードLua

は、ここに私の擬似コードです:私はNodeMCU Luaのを使用してい

wifi.setmode(wifi.STATION) 
wifi.sta.config("SSID","password") 
wifi.sta.connect() 

tmr.alarm(1,10000, 1, function() 
    if (wifi.sta.getip() == nil) then 
     print("IP unavaiable, Waiting...") 
    else 
     foo() 
    end 
end) 


function foo() 
    print("Inside foo function"..node.heap()); 
     conn = nil 
     conn=net.createConnection(net.TCP,0)  -- 30 seconds timeout time of server 
     conn:on("receive", function(conn, payload) 
      -- local buf = ""; 
      startRead = false 
      gpioData = "" 
      print("payload : "..#payload); 
      for i = 1, #payload do 
       print(i); 
      end  
     end) 
     conn:connect(80,"server.co.in") 
     conn:on("connection", function(conn, payload) 
      print("Server Connected, sending event") 
      conn:send("GET /mypage?id=deadbeef HTTP/1.1 200 OK\r\nHost: server.co.in\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end) 

     conn:on("sent",function(conn) 
       print("Closing server connection") 
       conn:close() 
      end) 
end 

、との推測では、私はArduinoのフレームワークを使用していても同じになります。

NodeMCU custom build by frightanic.com 
    branch: master 
    commit: 22e1adc4b06c931797539b986c85e229e5942a5f 
    SSL: false 
    modules: adc,bit,cjson,file,gpio,http,i2c,mdns,mqtt,net,node,ow,struct,tmr,uart,websocket,wifi 
build built on: 2017-05-03 11:24 
powered by Lua 5.1.4 on SDK 2.0.0(656edbf) 

私のサーバー上のすべてのリクエストを見ることができます。つまり、サーバーのリクエストコードはOKですが、ペイロード/レスポンスは空白になります。

出力が空白になりました...

助けてください。

+0

ドキュメントのサンプルをhttps://nodemcu.readthedocs.io/en/latest/en/modules/net/#example_5およびhttps://nodemcu.readthedocs.io/en/でご覧ください。最新/ en/modules/net /#example_6。 –

答えて

2
 conn:send("GET /mypage?id=deadbeef HTTP/1.1 200 OK\r\nHost: server.co.in\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end) 

これは有効なHTTPリクエストではありません。 HTTPリクエストとHTTPレスポンスが混在するように見えます。サーバーはこれを理解していないため、単に接続を閉じることがあります。有効なHTTPリクエストは次のようになります。

別にあなたがHTTP/1.1を使用しても、明示的にこの動作がとにかくHTTP/1.1との暗黙のですが、HTTP持続的接続( Connection: keep-alive)を使用することを設定されていることから、
GET /mypage?id=deadbeef HTTP/1.1\r\n 
Host: ...\r\n 
\r\n 

を。このため、現在のように応答がすぐに接続終了に続くことは期待できません。また、HTTP/1.1のために、HTTPチャンクエンコーディングに対処する必要があります。

この複雑さを回避する最も簡単な方法は、代わりにHTTP/1.0を使用し、Connectionヘッダーを使用しないか、closeに明示的に設定することです。代わりに複雑さを本当に処理したい場合は、慎重にthe standardを勉強してください。

+0

ありがとうございました。それが私を助けました。私はヘッダーがそれを悪い要求にしていたと推測することができ、私は404を得ていた。 – aditgupta100

+0

私はもう一度私を助けることができますか? LUAでローカルサーバーをポート80でサーバーのページを聞きながら作成しようとしています。どうすればいいのですか? – aditgupta100

+0

@ aditgupta100:私の知る限りでは、元の質問に答える(したがって受け入れるべきです)。あなたが今質問していることはまったく新しい質問であり、コメントの中ではなく新しい質問として尋ねられるべきです。このようにすれば、より良い解答が得られ、他の解答者も利益を得ることができます。 –

関連する問題