Пустая полезная нагрузка после запроса GET на страницу сервера в ESP8266 Lua

Я получаю нулевую полезную нагрузку при попытке получить данные со страницы с помощью модуля Wi-Fi ESP8266 с использованием 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

Я использую NodeMCU Lua, и думаю, будет так же, даже если я буду использовать фреймворк 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)

Я могу видеть все запросы на моем сервере, что означает, что код запроса сервера в порядке, но полезная нагрузка / ответ выходит пустым.

Вывод полностью пустой ...

Пожалуйста помоги.


person aditgupta100    schedule 04.05.2017    source источник
comment
Взгляните на примеры, которые есть в документации по адресу nodemcu.readthedocs .io / en / latest / en / modules / net / # example_5 и nodemcu.readthedocs.io/en/latest/en/modules/net/#example_6.   -  person Marcel Stör    schedule 04.05.2017


Ответы (1)


       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. Если вместо этого вы действительно хотите справиться со сложностью, внимательно изучите стандарт.

person Steffen Ullrich    schedule 04.05.2017
comment
Большое спасибо. Это мне помогло. Я также мог предположить, что заголовок делал его плохим запросом, и я получал 404. - person aditgupta100; 06.05.2017
comment
ты можешь мне помочь еще раз? Я пытаюсь сделать локальный сервер в LUA вместе с прослушиванием страницы сервера на порту 80. Возможно ли это, если нет, как я могу это сделать? - person aditgupta100; 06.05.2017
comment
@ aditgupta100: Насколько я понимаю, на исходный вопрос дан ответ (и поэтому его следует принять). То, что вы задаете сейчас, - это совершенно новый вопрос, и его следует задавать как новый вопрос, а не внутри комментария. Таким образом, вы можете получить более точные ответы, и другие также получат выгоду, поскольку никто не будет просматривать все комментарии, если описанная проблема существует. - person Steffen Ullrich; 06.05.2017
comment
Я уже спрашивал об этом здесь stackoverflow.com/questions/43819786/ - person aditgupta100; 06.05.2017