1

JSON 用の API を持つ Django があり、それを Lua (Corona SDK) プロジェクトで取得したいと考えています。

CURLのDjangoプロジェクトの場合。

curl -l -X POST -d "message=getstrings" http://127.0.0.1:8000/api/getstrings/

これは以下を返します:

{
    "message": "Something good happened on the server!", 
    "data": [
        {
            "code": "003", 
            "doc1": "sd.doc", 
            "title": "Test", 
            "artist": "ABBA", 
            "img": "sd.png", 
            "genre": "Pop"
        }, 
        {
            "code": "004", 
            "doc1": "sdsd.doc", 
            "title": "sdf", 
            "artist": "ABBA", 
            "img": "sdsd.png", 
            "genre": "Pop"
        }
    ], 
    "success": true
}

に問題がpost methodありjsonますLua。返されたjsonがLuaで取得されるようにしたい。

私は私の中でこれを試しLuaます。

local response = {}
local r, c, h = http.request{
  url= "http://127.0.0.1:8000/api/getstrings/",
  method = "POST",
  headers = {
    ["content-length"] = "",
    ["Content-Type"] = "application/x-www-form-urlencoded"
  },
  source = ltn12.source.string(post),
  sink = ltn12.sink.table(response)

}
local path = system.pathForFile("r.txt", system.DocumentsDirectory)
local file = io.open (path, "w")

file:write (response[1] .. "\n")
io.close (file)

私が開いたときr.txt

私はこれを得た ...

File "home/myhome/workspace/djangoproj/api/handlers.py", line 21, in create
  if attrs['message'] == 'getstrings':

KeyError: 'message'

messageその値がLuaによって渡されなかったため、エラーの原因はわかっています。私の質問は、この CURL のような同等のコードは何かということです

curl -l -X POST -d "message=getstrings" http://127.0.0.1:8000/api/getstrings/

Lua (Corona SDK) で、Lua が返されたJson?を取得してダウンロードできるようにします。私のコードLuaは正しいですか?

誰かが私のケースについて考えを持っていますか? 前もって感謝します ...

4

1 に答える 1

1

コロナが提供するnetwork.request機能を使ってみませんか?
非同期でもあります。

local function listener(event)
    print(event.response)
    print(event.isError)
    print(event.status)
end


local url = "http://127.0.0.1:8000/api/getstrings/"

local body = "message=getstrings"

local headers = {}
headers["content-length"] = body:len(),
headers["Content-Type"] = "application/x-www-form-urlencoded"



local postData = {}
postData.body = body
postData.headers = headers

network.request(url,"POST",listener,postData)

ここを読んでください http://developer.anscamobile.com/reference/index/networkrequest

編集

本当に http.request を使用したい場合は、これを行うことができます。

local url = "http://127.0.0.1:8000/api/getstrings/"
local body = "message=getstrings"
local headers = {
    ["content-length"] = body:len(),
    ["Content-Type"] = "application/x-www-form-urlencoded"
  }

local response = {}
local r, c, h = http.request{
  url= url,
  method = "POST",
  headers = headers,
  source = ltn12.source.string(body),
  sink = ltn12.sink.table(response)

}
于 2012-05-29T04:16:45.137 に答える