1

I'm performing a request to a foreign API using luasec, lua-socket and converting the data, a JSON string, to a lua table with cjson. I've read the docs of said modules and unfortunately none of it helped me with my problem. Can't link more than 2 websites with current account, sorry.

Summary: I get the response and the appropiate string using the posted request function, when turning said string into a lua table via cjson.decode the output table isn't the desired one, it's a copy of my response header, which is not intentional.

The following code is how I do my request:

local function request (req_t)
  local res_t = {}

  resp = https.request {
    url = const.API_URL .. req_t.url,
    method = req_t.method,
    headers = req_t.headers,
    sink = ltn12.sink.table(res_t)
  }

  return table.concat(res_t), resp.headers, resp.code
end

Using the following call

local res, headers = request({ ... })

I receive the proper response as a string but my goal is to do data manipulation with it, so turning said response(string) to a lua table with

local resJson = cjson.decode(res)

Does not produce the correct output. It does produce a table which is exactly the same as my response header. Here is the following output from my terminal alongside the code

When out of function type is: string

Desired response in string:
{"total_photos":221926,"photo_downloads":"186029632.0"}

When out of function type is: string

Desired response in string:
{"total_photos":221926,"photo_downloads":"186029632.0"}


After decode, type is: table

server  Cowboy
strict-transport-security   max-age=31536000
access-control-allow-headers    *
x-ratelimit-limit   50
x-ratelimit-remaining   46
x-cache-hits    0, 0
accept-ranges   bytes
access-control-request-method   *
x-request-id    ee5a74fd-2b10-4f46-9c25-5cfc53aeac6c
access-control-expose-headers   Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining
content-type    application/json
connection  close
content-length  55
fastly-debug-digest f62d52c08b1ef74db89a66a0069f0a35c49e52230567905240dacf08c9ea1813
vary    Origin
cache-control   no-cache, no-store, must-revalidate
x-timer S1496524765.369880,VS0,VE111
x-cache MISS, MISS
x-served-by cache-iad2123-IAD, cache-mad9429-MAD
via 1.1 vegur, 1.1 varnish, 1.1 varnish
date    Sat, 03 Jun 2017 21:19:25 GMT
age 0
access-control-allow-origin *
x-runtime   0.011667

Printing header

server  Cowboy
strict-transport-security   max-age=31536000
access-control-allow-headers    *
x-ratelimit-limit   50
x-ratelimit-remaining   46
x-cache-hits    0, 0
accept-ranges   bytes
access-control-request-method   *
x-request-id    ee5a74fd-2b10-4f46-9c25-5cfc53aeac6c
access-control-expose-headers   Link,X-Total,X-Per-Page,X-RateLimit-Limit,X-RateLimit-Remaining
content-type    application/json
connection  close
content-length  55
fastly-debug-digest f62d52c08b1ef74db89a66a0069f0a35c49e52230567905240dacf08c9ea1813
vary    Origin
cache-control   no-cache, no-store, must-revalidate
x-timer S1496524765.369880,VS0,VE111
x-cache MISS, MISS
x-served-by cache-iad2123-IAD, cache-mad9429-MAD
via 1.1 vegur, 1.1 varnish, 1.1 varnish
date    Sat, 03 Jun 2017 21:19:25 GMT
age 0
access-control-allow-origin *
x-runtime   0.011667

Function that produces said log

local res, headers = request({ ... })

print('When out of function type is: ' ..type(res) .. '\n')
print('Desired response in string:')
print(res .. '\n')
resJson = cjson.decode(res)
print('\nAfter decode, type is: ' .. type(resJson) .. '\n')
pTable(resJson)
print('\nPrinting header\n')
pTable(headers)

pTable is just a function to output a table to stdout.

Thanks in advance

  • I have ran your code (with addition of missing parts and minimal edits also due to missing parts; Lua version 5.2, luasec, luasocket, lua-cjson from luarocks) and it works as intended. I suggest debugging it in a proper way: with a debugger (ZBS's or LDT's). – Aki Jun 04 '17 at 11:23
  • Tested it in ZBS's debugger and it was working as intended. The problem was actually in my print table function which had my headers table hardcoded. Nothing wrong except me. Thanks for the help – Victor Carvalho Jun 04 '17 at 13:14

1 Answers1

0

Posted function and routines are correct. The problem was located in my print table function, which I somehow had hardcoded my headers.