2013-06-28 7 views
12

Ho difficoltà a utilizzare il POST generico lua socket. Sto cercando di pubblicare su un sito web insieme a un corpo. Ma l'uscita del corpo che ho ottenuto è pari a 1. Ecco il mio codicesocket lua POST

local http = require "socket.http" 
local ltn12 = require "ltn12" 
local util = require "util" 
    local reqbody = "anid=&protocol=1&guid=dfe49e55b63f2cf93eb9aabe44b6d9dc5286bbbedfcbf1c75b95f7a4f7439029&d_type=phone&os_version=6.1&ate=1&asid=079ABF64-A23A-4E3B-9000-19A4A608CCBE&affiliate=&modin=7c78d075f379db2f40c9f68df857cb87&os=ios&d_id=107b2734fdb7898251f62d229168484a9d14f7fb654d02d957b30c9f22bb094c&d_code=1E5D02FF-63F3-43A0-A2BF-80E63E00F76C&pn_device_id=&name_hint=iPhone%20Simulator&d_sig=dfe49e55b63f2cf93eb9aabe44b6d9dc5286bbbedfcbf1c75b95f7a4f7439029&hdid=62624a01f8715f2b838224a4a285746d&tracker=&appid=536381662&odin=1da61c680b672c4e114df45cd5f8f0aa9b088338&model=iPhone%20Simulator&ver=15&campaign=&imei=&store_type=apple&" 
    local respbody = {} 
    local body, code, headers, status = http.request { 
     method = "POST", 
     url = "https://freshdeck.idle-gaming.com/api/guest_session/", 
     source = ltn12.source.string(reqbody), 
     headers = 
       { 
         ["Accept"] = "*/*", 
         ["Accept-Encoding"] = "gzip, deflate", 
         ["Accept-Language"] = "en-us", 
         ["Content-Type"] = "application/x-www-form-urlencoded", 
         ["content-length"] = string.len(reqbody) 
       }, 
     sink = ltn12.sink.table(respbody) 
    } 

    LOGINFO('body:' .. tostring(body)) 
    LOGINFO('code:' .. tostring(code)) 
    LOGINFO('headers:' .. util.tableToString(headers)) 
    LOGINFO('status:' .. tostring(status)) 

e sotto è l'uscita

body:1 
code:200 
headers: "set-cookie": "config_version=887; expires=Sat, 29-Jun-2013 19:07:09 GMT; Max-Age=86400; Path=/" 
    "date": "Fri, 28 Jun 2013 19:07:09 GMT" 
    "ed-config-version": "887" 
    "content-encoding": "gzip" 
    "cache-control": "private, no-cache, no-store, must-revalidate" 
    "connection": "Close" 
    "vary": "Cookie" 
    "content-length": "52" 
    "pragma": "no-cache" 
    "content-type": "application/json; charset=utf-8" 
    "server": "nginx/1.2.7" 

status:HTTP/1.1 200 OK 

Non so il motivo per cui il corpo restituisce 1, tutte le idee?

Grazie in anticipo per il vostro aiuto.

+0

Avete documentazione per l'API che state utilizzando? –

+0

sì, non molto chiaro. http://w3.impa.br/~diego/software/luasocket/http.html – user1817517

+0

Intendevo la documentazione per l'API di freshdeck ma vedo che yu-hao ha dato quella che sembra essere la risposta corretta dai documenti di luasocket. –

risposta

12

http.request ha due forme: il modulo semplice scarica un URL utilizzando il metodo GET o POST e si basa su stringhe.

http.request(url [, body]) 

Il modulo generico esegue qualsiasi metodo HTTP ed è basato su LTN12.

http.request{ 
    url = string, 
    [sink = LTN12 sink,] 
    [method = string,] 
    [headers = header-table,] 
    [source = LTN12 source], 
    [step = LTN12 pump step,] 
    [proxy = string,] 
    [redirect = boolean,] 
    [create = function] 
} 

Si utilizza la forma generica, e secondo la document, il primo valore di ritorno dovrebbe essere 1.

In caso di guasto, la funzione restituisce nil seguiti da un messaggio di errore . In caso di esito positivo, il modulo semplice restituisce il corpo della risposta sotto forma di stringa, seguito dal codice di stato della risposta, dalle intestazioni di risposta e dalla riga di stato della risposta. La funzione generica restituisce la stessa informazione, tranne il primo valore restituito è solo il numero 1 (il corpo va al lavandino).

+2

Sì. Il vero corpo è 'table.concat (respbody)'. – catwell