在 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) 会将响应转储到标准输出。