我试图通过LUA调用REST API。但是,我无法捕获API返回的完整原始响应。以下是代码示例:
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 version = 2.4.1。 在变量c中我得到代码,而在h中有几个标题。我需要捕获API返回的完整响应。
答案 0 :(得分: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)
会将响应转储到标准输出。