2016-11-18 4 views
1

나는 openSource 펌웨어 인 nodeMCU가있는 ESP8266 칩을 사용하여 칩 내부에 루아 스크립트를 프로그래밍 할 수 있습니다.루아의 캡 티브 포털 오류 : 무한 로딩

캡 티브 포털로 사용하고 있으며 사용자 이름 - 암호 형식의 txt 파일 데이터에 로그인하고 싶습니다. 코드를 작성했지만 wifi에 연결하면 포털 페이지로 리디렉션됩니다.로드가 무한하며 홈페이지가로드되지 않습니다. 내가 알아낼 수 없습니다

왜 여기 내 루아 코드

srv=net.createServer(net.TCP) 
srv:listen(80,function(conn) 

    local rnrn=0 
    local Status = 0 
    local DataToGet = 0 
    local method="" 
    local url="" 
    local vars="" 

    conn:on("receive",function(conn,payload) 

    if Status==0 then 
     _, _, method, url, vars = string.find(payload, "([A-Z]+) /([^?]*)%??(.*) HTTP") 
     -- print(method, url, vars)       
    end 

    if url==nil then 
     url="index.htm" 
    end 

    if url=="" then 
     url="index.htm" 
    end 

    -- some ugly magic for Apple IOS Devices 
    if string.find(url, "/") ~= nil then 
    --print ("Slash found") 
    local invurl=string.reverse(url) 
    local a,b=string.find(invurl, "/", 1) 
    url=string.sub(url, string.len(url)-(a-2)) 
    --print ("Neue URL= " .. url) 
    end 

    if string.len(url)>= 25 then 
     url = string.sub (url,1,25) 
    -- print ("cut down URL") 
    end 


    DataToGet = -1 

    if url == "favicon.ico" then 
     conn:send("HTTP/1.1 404 file not found") 
     return 
    end  


    conn:send("HTTP/1.1 200 OK\r\n\r\n") 

    if url=="login.htm" then 
     loginPage() 
     conn:close() 
     return 
    end 

    if url=="logData" then 
     loginPage() 
     -- save data in a file 
     file.open("log.txt", "w+") 
     file.write(vars) 
     file.flush() 
     file.close() 
     conn:close() 
     return 
    end 


    local foundmatch = 0 
    local a = {'wumpus.htm','index.htm','about.htm','ttt.htm','instruct.htm','status.htm','kg-small.png','talk.htm','hovercraft.mp3','test.pdf'} 
    for _,v in pairs(a) do 
     if v == url then 
      foundmatch=1 
      -- print ("Found " .. v) 
      break 
     end 
    end 

if foundmatch == 0 then 
    -- print ("Found no match, setting index") 
    url="index.htm" 
end 

end) 

end) 

function loginPage() 
    conn:send("<html><body><h1>Login</h1>") 
    conn:send("<form action='logData' method='post'><label for='un'>Username:</label><input type='text' name='un' /><label for='pw'>Password:</label><input type='password' name='pw' /><input type='submit' name='submit' value='Submit' /></form>") 
    conn:send("</body></html>") 
end 
print("HTTP Server is now listening. Free Heap:", node.heap()) 

답변

0

나는 쇼를 편집 로그인,하지만 분명히 하나의 실수하지 않을 것이다. 쟌코 피

 function loginPage(conn) 
     conn:send('HTTP/1.1 200 OK\r\n\r\n<html><body><h1>Login</h1>'.. 
     '<form action="logData" method="post"><label for="un">Username:</label>'.. 
     '<input type="text" name="un" /><label for="pw">Password:</label>'.. 
     '<input type="password" name="pw" /><input type="submit" name="submit" value="Submit" /></form>'.. 
     '</body></html>') 
    end 
    srv=net.createServer(net.TCP) 
    srv:listen(80,function(conn) 

     local rnrn=0 
     local Status = 0 
     local DataToGet = 0 
     local method="" 
     local url="" 
     local vars="" 

     conn:on("receive",function(conn,payload) 

     if Status==0 then 
      _, _, method, url, vars = string.find(payload, "([A-Z]+) /([^?]*)%??(.*) HTTP") 
      print(method, url, vars) 
     end 

     if url==nil then 
      url="index.htm" 
     end 

     if url=="" then 
      url="index.htm" 
     end 

     -- some ugly magic for Apple IOS Devices 
     if string.find(url, "/") ~= nil then 
     --print ("Slash found") 
     local invurl=string.reverse(url) 
     local a,b=string.find(invurl, "/", 1) 
     url=string.sub(url, string.len(url)-(a-2)) 
     --print ("Neue URL= " .. url) 
     end 

     if string.len(url)>= 25 then 
      url = string.sub (url,1,25) 
     -- print ("cut down URL") 
     end 


     DataToGet = -1 

     if url == "favicon.ico" then 
      conn:send("HTTP/1.1 404 file not found") 
      return 
     end 




     if url=="login.htm" then 
      loginPage(conn) 
      conn:on("sent", function(conn) conn:close() end) 
      return 
     end 

     if url=="logData" then 
      loginPage(conn) 
      -- save data in a file 
      file.open("log.txt", "w+") 
      file.write(vars) 
      file.flush() 
      file.close() 
      conn:on("sent", function(conn) conn:close() end) 
      return 
     end 


     local foundmatch = 0 
     local a = {'wumpus.htm','index.htm','about.htm','ttt.htm','instruct.htm','status.htm','kg-small.png','talk.htm','hovercraft.mp3','test.pdf'} 
     for _,v in pairs(a) do 
      if v == url then 
       foundmatch=1 
       -- print ("Found " .. v) 
       break 
      end 
     end 

    if foundmatch == 0 then 
     -- print ("Found no match, setting index") 
     url="index.htm" 
    end 

    end) 

    end) 


    print("HTTP Server is now listening. Free Heap:", node.heap())