在 Lua 套接字调用中捕获完整响应
Capture full response in Lua Socket call
我正在尝试通过 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 中有一些 headers。我需要捕获 API.
返回的完整响应
如您所知,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)
会将响应转储到标准输出。
我正在尝试通过 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 中有一些 headers。我需要捕获 API.
返回的完整响应如您所知,luasocket 的 http.request
支持 two forms of usage。我假设您需要第二种形式来自定义特定 API.
在这种情况下,要捕获响应正文,您需要将 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)
会将响应转储到标准输出。