2013-06-28 29 views
12

Tôi gặp khó khăn khi sử dụng lua socket POST chung. Tôi đang cố gắng ĐĂNG lên một trang web cùng với một cơ thể. Nhưng sản lượng cơ thể tôi đã nhận là 1. Dưới đây là mã của tôilua socket 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)) 

và dưới đây là sản phẩm

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 

Tôi không biết lý do tại sao cơ thể lợi nhuận 1, bất kỳ ý tưởng?

Cảm ơn bạn trước sự giúp đỡ của bạn.

+0

Bạn có tài liệu về API bạn đang sử dụng không? –

+0

vâng, không rõ ràng tho. http://w3.impa.br/~diego/software/luasocket/http.html – user1817517

+0

Tôi có nghĩa là tài liệu hướng dẫn cho API freshdeck nhưng tôi thấy rằng yu-hao đã đưa ra những gì dường như là câu trả lời đúng từ tài liệu luasocket. –

Trả lời

12

http.request có hai biểu mẫu, Biểu mẫu đơn giản tải xuống URL bằng phương thức GET hoặc POST và dựa trên chuỗi.

http.request(url [, body]) 

Biểu mẫu chung thực hiện bất kỳ phương pháp HTTP nào và dựa trên 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] 
} 

Bạn đang sử dụng hình thức chung chung, và theo document, giá trị trả về đầu tiên được coi là 1.

Trong trường hợp thất bại, trở về chức năng Nil tiếp theo một thông báo lỗi . Nếu thành công, biểu mẫu đơn giản trả về phần thân phản hồi dưới dạng chuỗi, theo sau là mã trạng thái phản hồi, tiêu đề phản hồi và dòng trạng thái phản hồi. Hàm generic trả về cùng một thông tin, ngoại trừ giá trị trả về đầu tiên chỉ là số 1 (phần thân đi vào bồn rửa).

+2

Có. Cơ thể thực là 'table.concat (respbody)'. – catwell