2017-02-22 71 views
1

我試圖通過LUA調用REST API。但是,我無法捕獲API返回的完整原始響應。下面是代碼示例:在Lua套接字調用中捕獲完整響應

local http_socket = require("socket.http") 
local pretty_print = require("pl.pretty") 
local header = { 
       ["x-device-type"] = "M", 
       ["authorization"] = "ashdjkashd", 
       ["x-app-secret"] = "asdasda", 
       ["x-user-id"] = "asdasdasd" 
       } 

r, c, h = http_socket.request { 
     method = "GET",       -- Validation API Method       
     url = "http://google.com", -- Validation API URL 
     headers = header 
} 
print(r .. c) 
pretty_print.dump(h) 

我使用Lua 5.3,和luarocks版本2.4.1 =。 在變量c我得到的代碼,並在h有幾個標題。我需要捕獲由API返回的完整響應。

回答

2

如您所知,luasocket的http.request支持two forms of usage。我假設你需要第二種形式來定製該特定API的resty請求。

在這種情況下,要捕獲響應主體,您需要使用sink字段和ltn12.sink模塊。例如需要

local ltn12 = require 'ltn12' 

-- ... 

local res = {} 
r, c, h, s = http_socket.request 
{ 
    method = "GET",    -- Validation API Method 
    url = "http://google.com", -- Validation API URL 
    headers = header, 
    sink = ltn12.sink.table(res) 
} 

res = table.concat(res) 
print(res) 

table.concat由於響應可以包括多個塊大小(因爲它的接收附加到res)的。

你也可以用ltn12.sink.file替代上面的文件寫出來,例如。使用ltn12.sink.file(io.stdout)會將響應轉儲到標準輸出。

+1

非常感謝!像魅力一樣工作。 – Geek