NodeMCU и размер payload

Тема в разделе "Проводная и беспроводная связь", создана пользователем RogerRU, 28 дек 2016.

  1. RogerRU

    RogerRU Нерд

    День добрый!
    Пытаюсь тут изучать NodeMCU и Lua и возникла проблема:
    Хочу получить с сервиса погоды Accuweather.com прогноз погоды в формате json стандартным методом GET, все бы ничего да на выходе получаю обрезку данных.
    Как я понял данные сгружаются в переменную payload, которая имеет ограниченный размер (или буфер какой то переполняется), а ответ сервера большой - 16k
    Может кто знает как решить проблему?

    Код (Text):
    function getHTTPreq()
       print('send GET to http server...')
       conn=net.createConnection(net.TCP, 0)
       conn:on("receive", function(conn, payload)
       local payload = string.match(payload, "{.*}")
         print("got answer")
         print(payload) ;
         conn:close(payload)
       end)
         conn:connect(80,"52.7.72.188")
         conn:send("GET /forecasts/v1/daily/5day/2437767?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"..
         "&language=ru-ru&details=true&metric=true HTTP/1.1 \r\n")
         conn:send("Host: dataservice.accuweather.com\r\n")
         conn:send("Accept: */*\r\n")
         conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n")
         conn:send("\r\n")
    end
    tmr.alarm(0, 1000, 1, function()
       if wifi.sta.getip()==nil then
          print("connecting to AP...")
       else
          print('ip: ',wifi.sta.getip())
          getHTTPreq()
          tmr.stop(0)
       end
    end)
    Результат:
    {"Headline":{"EffectiveDate":"2016-12-29T19:00:00+03:00","EffectiveEpochDate":1483027200,"Severity":2,"Text":"Гололед В четверг ночью","Category":"ice","EndDate":"2016-12-30T07:00:00+03:00","EndEpochDate":1483070400,"MobileLink":"http://m.accuweather.com/ru/ru/tsvy...ed-weather-forecast/2437767?unit=c&lang=ru-ru","Link":"http://www.accuweather.com/ru/ru/ts...ly-weather-forecast/2437767?unit=c&lang=ru-ru"}
    (с кодировкой еще беда, но фиг с ней пока)
     
  2. rkit

    rkit Гуру

    По идее, функция payload должна вызывать несколько раз, каждый раз с новым куском данных, так что вы зря закрываете соединение тут conn:close(payload)
    Хотя не писал ничего под эту прошивку.
     
  3. RogerRU

    RogerRU Нерд

    Да, черт побери, вы правы. Ща попробую