在ESP8266 Lua中GET请求服务器页面后的空载荷

在使用Lua的ESP8266 WiFi模块获取页面数据时,我正在获得零负载。

这里是我的伪代码:

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

我正在使用NodeMCU Lua,猜测即使我使用Arduino框架,也是一样的。

NodeMCU定制版由frightanic.com提供
    分支:主要
    提交:22e1adc4b06c931797539b986c85e229e5942a5f
    SSL:否
    模块:adc,bit,cjson,file,gpio,http,i2c,mdns,mqtt,net,node,ow,structtmruartwebsocketwifi
  构建日期:2017-05-03 11:24
 由SDK 2.0.0(656edbf)上的Lua 5.1.4提供支持

我能在我的服务器上看到所有请求,这意味着服务器请求代码是OK的,但有效载荷/响应为空白。

输出完全为空白...

请帮助。

点赞
用户3081018
用户3081018

这不是一个有效的 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。如果你真的想要处理这些复杂性,请仔细研究标准

2017-05-04 17:48:24