2

我正在尝试通过 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 版本=2.4.1。在变量 ci 中获取代码,在 h 中有一些标题。我需要捕获 API 返回的完整响应。

4

1 回答 1

4

你可能知道,luasockethttp.request支持两种使用方式。我假设您需要第二种形式来自定义该特定 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您也可以通过将上面替换为,例如将其写入文件。usingltn12.sink.file(io.stdout)会将响应转储到标准输出。

于 2017-02-22T21:59:48.090 回答