2017-05-04 25 views
0

當使用Lua使用ESP8266 WiFi模塊嘗試從頁面獲取數據時,我得到一個無負載。對ESP8266中的服務器頁面發出GET請求後的空有效負載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 

我使用Lua的NodeMCU,並猜測將是相同的,即使我將使用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) 

我能看到我的服務器,這意味着服務器請求的代碼是好的,但有效載荷/響應出來空白的所有請求。

輸出是完全空白...

請幫助。

+0

查看我們在https://nodemcu.readthedocs.io/en/latest/en/modules/net/#example_5和https://nodemcu.readthedocs.io/en/文檔中提供的示例。最新/ EN /模塊/網絡/#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請求,應該是這樣的:

GET /mypage?id=deadbeef HTTP/1.1\r\n 
Host: ...\r\n 
\r\n 

除了您正在使用HTTP/1.1,甚至明確設定要使用HTTP持久連接(Connection: keep-alive),雖然這種行爲是隱含的與HTTP/1.1反正。正因爲如此,你不可能期望響應會立即像目前一樣緊隨其後。另外,由於HTTP/1.1,您需要處理HTTP分塊編碼。

避免這種複雜性的最簡單方法是改用HTTP/1.0,而不是使用Connection標題,或者將其明確設置爲close。如果您真的想要處理複雜性,請仔細研究the standard

+0

非常感謝。這幫助了我。我還能夠猜出頭部是否是一個不好的要求,我得到了404. – aditgupta100

+0

你能再幫我一次嗎? 我想在LUA中一起製作一個本地服務器,並在端口80上監聽一個服務器頁面。這是否可能,如果不是,我該如何做? – aditgupta100

+0

@ aditgupta100:據我所見,原來的問題得到了回答(因此應該接受)。你現在要問的是一個全新的問題,應該作爲一個新問題而不是一個評論。這樣你就可以得到更好的答案,而其他人也可以從中獲益,因爲如果所描述的問題存在,沒有人會搜索所有評論。 –

相關問題