2017-02-22 26 views
1

Я пытаюсь вызвать API REST через LUA. Тем не менее, я не могу зафиксировать полный исходный ответ, возвращаемый API. Ниже приведен пример кода:Захват полного ответа в вызове Lua Socket

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's http.request поддерживает two forms of usage. Я предполагаю, что вам нужна вторая форма для настройки запроса resty для этого конкретного 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), выдает ответ на стандартный вывод.

+1

спасибо! Работал как шарм. – Geek