2017-02-22 25 views
1

LUA를 통해 REST API를 호출하려고합니다. 그러나 API에서 반환 된 전체 원시 응답을 캡처 할 수는 없습니다. 다음은 코드 샘플입니다.Lua 소켓 호출에서 전체 응답 캡처

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에서 반환 한 전체 응답을 캡처해야합니다.

답변

2

luasocket의 http.requesttwo forms of usage을 지원합니다. 특정 API에 대한 안정적인 요청을 사용자 정의하기 위해 두 번째 양식이 필요하다고 가정합니다.

이 경우 응답 본문을 캡처하려면 sink 필드와 ltn12.sink 모듈을 사용해야합니다. 응답이 (이 접수 res 추가로) 여러 청크 크기로 구성 될 수 있기 때문에 예를 들어

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가 필요하다.

위의 내용을 ltn12.sink.file으로 바꾸어 파일에 쓸 수도 있습니다 (예 : ltn12.sink.file(io.stdout)을 사용하면 표준 출력에 응답을 덤프합니다.

+1

대단히 감사합니다! 매력처럼 일했습니다. – Geek