J'effectue une requête à une API étrangère en utilisant luasec, lua-socket et en convertissant les données, une chaîne JSON, en une table lua avec cjson. J'ai lu les documents de ces modules et malheureusement, rien de tout cela m'a aidé avec mon problème. Impossible de lier plus de 2 sites Web avec le compte actuel, désolé.La chaîne JSON ne parvient pas à convertir en table Lua correcte
Résumé: J'obtiens la réponse et la chaîne appropriée en utilisant la fonction de requête affichée, quand je transforme cette chaîne en une table lua via cjson.decode, la table de sortie n'est pas celle désirée, c'est une copie de mon entête de réponse, ce qui n'est pas intentionnel.
Le code suivant est comment je fais ma demande:
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
Utilisation de l'appel suivant
local res, headers = request({ ... })
Je reçois la réponse appropriée en tant que chaîne, mais mon but est de faire la manipulation de données avec elle afin de tourner à ladite réponse (string) pour une table de lua avec
local resJson = cjson.decode(res)
-t pas produire la sortie correcte. Il produit une table qui est exactement le même que mon en-tête de réponse. Voici la sortie suivante de mon terminal à côté du 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
Fonction qui produit ledit journal
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 est juste une fonction de sortie d'une table à stdout.
Merci à l'avance
J'ai couru votre code (avec l'addition des pièces manquantes et des éditions minimales également dues aux pièces manquantes; Lua version 5.2, luasec, luasocket, lua-cjson de luarocks) et cela fonctionne comme prévu. Je suggère de le déboguer correctement: avec un débogueur (ZBS ou LDT). – Green
Testé dans le débogueur de ZBS et il fonctionnait comme prévu. Le problème était en fait dans ma fonction de table d'impression qui a eu ma table d'en-têtes codée en dur. Rien de mal sauf moi. Merci pour l'aide –