lua 스 크 립 트 httpPostJSon: application / json;charset=UTF-8

8864 단어 lua
@[toc]
머리말
Lua 는 표준 C 언어 로 작 성 된 가 벼 운 스 크 립 트 언어 로 원본 을 엽 니 다.
그 디자인 목적 은 응용 프로그램 에 삽입 하여 응용 프로그램 에 유연 한 확장 과 맞 춤 형 기능 을 제공 하 는 것 이다.루 아 는 브라질 리 우 데 자네 이 루 가톨릭 대학의 한 연구 팀 (Roberto Ierusalimschy, Waldemar Celes, Luiz Henrique de Figueiredo 로 구성) 이 1993 년 개발 했다.
하나의 유 니 버 설 형식의 표 (table) 만 제공 합 니 다. 이 를 통 해 배열, 해시 표, 집합, 대상 을 실현 할 수 있 습 니 다.다 중 스 레 드 (협동 프로 세 스, 운영 체제 가 지원 하 는 스 레 드 가 아 닙 니 다) 지원 을 제공 합 니 다.
p: 협동 프로 세 스 내부 에서 http 요청 을 할 때 장치 가 끊 길 수 있 습 니 다.
  • 기본 상용 기능: 아이 폰 자동 잠 금 해제
  • lua 가 시작 한 Content - Type 은 application / json 입 니 다.charset = UTF - 8 에서 요청 한 GitHub 원본 코드
  • Lua 의 협동 절 차 를 이용 하여 생산자 - 소비자 라 는 전형 적 인 문 제 를 완성 한다
  • I. 기초 상용 기능
  • 아이 폰 자동 잠 금 해제
  • init("0", 0);
    require "TSLib"
    while (true) do
    
        if deviceIsLock()  == 1 then    --        
            unlockDevice()--        
        end
    end
  • 인쇄 table 을 옮 겨 다 니 는 두 가지 방식
  • if type(response_body) == "table" then  
                        for k, v in pairs(response_body) do  
                            -- print( v)  
                            -- print( type(v))
                            str2 = v
                        end  
                    end  
     if type(response_body) == "table" then
            sysLog("《"..table.concat(response_body).."》")
            else
            sysLog("Not a table:", type(response_body))
        end
  • 점 좌표 와 대응 하 는 색 가 져 오기
  •    x,y = catchTouchPoint();
               sysLog("catchTouchPoint"..x..","..y);
                r,g,b = getColorRGB(x,y);
                sysLog("getColor:"..r..","..g..","..b);
    
    
  • lua 는 와 이 파이 의 대 리 를 가지 않 고 장치 의 hosts
  • 만 설정 할 수 있 습 니 다.
    iPhone:/etc root# echo "192.168.2.254 alimama.fuge.cn" > /etc/hosts
    iPhone:/etc root# echo '127.0.0.1 localhost' >> /etc/hosts

    II 、 생산자 - 소비자 문제
    지금 나 는 루 아의 협동 절 차 를 이용 하여 생산자 - 소비자 라 는 전형 적 인 문 제 를 완성 할 것 이다.
       -     
          Lua           -         。
    local newProductor
    
    function productor()
         local i = 0
         while true do
              i = i + 1
              send(i)     --             
         end
    end
    
    function consumer()
         while true do
              local i = receive()     --           
              print(i)
         end
    end
    
    function receive()
         local status, value = coroutine.resume(newProductor)
         return value
    end
    
    function send(x)
         coroutine.yield(x)     -- x        ,     ,        
    end
    
    --     
    newProductor = coroutine.create(productor)
    consumer()

    하나의 퀘 스 트 (생산) 를 수행 하고 데 이 터 를 서버 (소비) 에 보고 하여 다음 퀘 스 트 의 장면 을 엽 니 다.
    한 번 생산 하고 한 번 소비 하 다.
    III Http4lua
    - lua 가 시작 한 Content - Type 은 application / json 입 니 다.charset = UTF - 8 요청 패키지httpPostJson
    --local json = require "json"
    local sz = require("sz")
    local json = sz.json
    local http = require("szocket.http")
    require "TSLib"
    
    
    
    local globalIOS8 = -1
    local globalIOS9 = -1
    
    function isiOS8()
    
        if globalIOS8 == -1 then
            if  string.byte( osversion ,1) == string.byte( "8" ,1) then
                globalIOS8 = 1
            else
                globalIOS8 = 0
            end     
        end
    
        return globalIOS8 == 1
    end
    
    function isiOS9()
        if globalIOS9 == -1 then
            if  string.byte( osversion ,1) == string.byte( "9" ,1) then
                globalIOS9 = 1
            else
                globalIOS9 = 0
            end     
        end
    
        return globalIOS9 == 1
    
    end
    
    function isiOS10()
        return isiOS8() == false and isiOS9() == false
    end
    
    
    
    
    
    w,h = getScreenSize()
    
    
    
    function clearDeviceData(...)
        clearPasteboard()--         
        clearCookies() --     Cookies  
    end
    
    
    function click2(pt)
        touchDown(pt.x, pt.y)
        mSleep(60)
        touchUp(pt.x, pt.y)
    end
    
    function click(x, y)
        touchDown(x, y)
        mSleep(60)
        touchUp(x, y)
    end
    
    
    function findMultiColorInRect( colorTable , rc )
        x,y=findMultiColorInRegionFuzzyByTable(colorTable,90, rc.x1 , rc.y1 , rc.x2 , rc.y2 )
        return x,y
    end
    
    function findMultiColorInRectBool( colorTable , rc )
        x,y=findMultiColorInRegionFuzzyByTable(colorTable,90, rc.x1 , rc.y1 , rc.x2 , rc.y2 )
        if x ~= -1 and y ~= -1 then
            return true
        else
            return false
        end
    end
    
    --return handled
    function findAndClick( colorTable , rc )
    
        x,y= findMultiColorInRect( colorTable , rc)
    
        if x ~= -1 and y ~= -1 then
            mSleep(500)
            click(x,y)
            return true
        else
            return false
        end
    
    end
    
    
    local myToken = "dinghao"
    
    function httpPost( http_url , content_type , http_body  )
        
        sysLog("《httpPost start 》http_url: "..http_url);
        sysLog("content_type: "..content_type);
        sysLog("http_body :")
        if type(http_body) == "table" then
            sysLog(table.concat(http_body))
            else
            if(not(http_body == nil)) then
                sysLog("Not a table:"..http_body)
            end
        end
        
        
        local response_body = {}  
        local res, code, response_headers = http.request{  
            url = http_url,  
            method = "POST",  
            headers =  
            {  
                ["Content-Type"] = content_type;  
                ["Content-Length"] = #http_body;  
            },  
            source = ltn12.source.string(http_body),  
            sink = ltn12.sink.table(response_body),  
        }
        decode3 = {};
        --notifyMessage("res is:"..res);
        sysLog("《httpPost end 》");
        if(not(res == nil)) then
            sysLog("res:"..res);
            
        else
        --code: timeout
        res= "";
        sysLog("code: "..code);
        
        --            
        
        --             
        file = io.open("/var/root/lualog.text", "a")
        --           Lua   
        --           test.lua
        io.output(file)
        
        if type(response_body) == "table" then
            file:write("--res:"..res.." code:"..code.." response_body:"..table.concat(response_body).."
    ") else file:write("--res:"..res.." code:"..code.." response_body[1]:"..type(response_body).."
    ") end -- file:close() return res,code,decode3 end sysLog("code: "..code); sysLog("Response body:") if type(response_body) == "table" then sysLog("《"..table.concat(response_body).."》") else sysLog("Not a table:", type(response_body)) end if (not(response_body[1] == nil)) then decode3 = json.decode( response_body[1] )-- string end return res,code,decode3 end function httpPostJson(http_url , json_body_table ) assert( type(json_body_table) == "table" ) return httpPost(http_url,"application/json; charset=UTF-8", json.encode( json_body_table ) ) end local globalURL = "" local smsStatusProcessing = 2 local smsStatusFailed = 3 local smsStatusFinished = 4
  • httpPostJSon 의 사용 예:
  •   local postTable = {};
                 --    
        
       local  res,code,response_body = httpPostJson(urlTable["getNew"], postTable);
         
         --notifyMessage("res is:"..res);
         sysLog("response_body "..table.concat(response_body));
         sysLog(res)
         sysLog("Response body:")
         if type(response_body) == "table" then
             sysLog(table.concat(response_body))
             else
             sysLog("Not a table:", type(response_body))
         end
         
         --send("timeout")     --             ,        
         send(table.concat(response_body))     --             
    
        writePasteboard(code);
    
  • 봉 인 된 httpPostJSon 을 통 해 데 이 터 를 보고 요청
  • - function KNreport(report)
    
    if not(type(report) == "table") then
        return;
    end
    
    getnewurl = ""..urlbaseTable[getenv()]..methodurlTable["report"];
    local  res,code,response_body = httpPostJson(getnewurl, report);
    
    --send("timeout")     -- 
    --send()     -- 
    
    local jsonBody= response_body;
    sysLog("jsonBody :"..table.concat(response_body));
    
    code = jsonBody["Code"];
    sysLog("Code:"..code.."type"..type(Code));           --break;
    
    if( code == 201 ) then
        
        sysLog("201:");           --break;
        elseif (code == 200 )   then
        sysLog("    !");           --break;
    end
    end
    

    see also
    다 중 주석 추천 사용 -- [= [주석 내용] =]

    좋은 웹페이지 즐겨찾기