Size: a a a

2019 October 15

A

Anton in pro.lua
Просто энтузиаст, а ещё там работает :-)
источник

A

Anton in pro.lua
Но пост написал по своей инициативе.
источник

DF

Dollar Føølish in pro.lua
Понятно
источник
2019 October 16

P

Pavel in pro.lua
источник

S

Serezha in pro.lua
проблемы гарбадж коллектора и строк в луаджите обсуждаем здесь периодически - как в статье
источник

D

DaySandBox in pro.lua
Message from Uncle Badger Jack Nwalieze deleted. Reason: new user and external link (?)
источник
2019 October 17

AS

Anatoliy S in pro.lua
Ребяты всем привет, будьте добры кто нибудь подскажите, по проблеме:  хочу отправить API запрос на криптобиржу EXMO,  https://exmo.me/en/api, метод user_info
Скрипт в упрощенном виде выглядит так:

mime = require("mime")
ltn12 = require("ltn12")
ssl = require("ssl")
http = require("socket.http")
https = require("ssl.https")
socket = require("socket")

function httpreq(req,file)
local r, c, h, s
local body = ''
local resp
local method,url,sink
https = require("ssl.https")
r, c, h, s = https.request {
   method = "GET",
   url = req,
   headers = {Key='MyAPIKey'},
   sink = ltn12.sink.file(io.stdout)
}
return body, r, c, h, s
end

body = httpreq('https://api.exmo.com/v1/user_info')

print (body)



В итоге  получаю ответ:
{"result":false,"error":"40007: Incorrect format parameter 'nonce'"}

Что это за параметр nonce для чего он и как его правильно задать?
источник

AN

Alex Novi in pro.lua
Мне кажется это сервис отдает , и надо смотреть в доках у них
источник

AN

Alex Novi in pro.lua
скорее всего так как это get то в url строке ожидалось что то вроде этого
'https://api.exmo.com/v1/user_info?nonce=any'
источник

AS

Anatoliy S in pro.lua
Alex Novi
скорее всего так как это get то в url строке ожидалось что то вроде этого
'https://api.exmo.com/v1/user_info?nonce=any'
Не непрокатывает, пробовал в скрипте изменить  запрос на https://api.exmo.com/v1/user_info?nonce=any', на  https://api.exmo.com/v1/user_info?nonce="any"
пробовал в headers добавить -   headers = {Key='MyAPIKey', nonce="any"}
никак неработает
источник

AS

Anatoliy S in pro.lua
Alex Novi
скорее всего так как это get то в url строке ожидалось что то вроде этого
'https://api.exmo.com/v1/user_info?nonce=any'
Спасибо, это навело меня на мысль  и я разобрался - да надо выполнить так https://api.exmo.com/v1/user_info?nonce=any, только не any а после равно нужно поставить время в миллисекундах с начала эпохи юникс, посмотрел их пример на пифоне там такие строки:   nonce = int(round(time.time()*1000)), погуглил что это за функция time.time() на пифоне и стало ясно
источник

AS

Anatoliy S in pro.lua
Хотя видимо необязательно это должно быть время юникс да и еще в миллисекундах, там в документации такие строки есть: "All the requests should also include the obligatory POST parameter ‘nonce’ with incremental numerical value (>0). The incremental numerical value should never reiterate or decrease."
Сразу необратил внимание, то есть видимо nonce это просто счетчик который в каждом запросе просто должен быть больше чем в предыдущем
источник

AS

Anatoliy S in pro.lua
А вот дальше уже сложнее, там у них в headers надо еще добавить элемент  Sign , т.е. headers = {Key='MyAPIKey', Sign=....}
Где ... - цифровая подпись поторую надо создать самому с помощью закрытого API ключа, в строке Key='MyAPIKey'  - это был открытый  ключ никак незашифрованный,
У них в примере на пифоне код http запроса выглядит так:
источник

AS

Anatoliy S in pro.lua
import httplib
import urllib
import json
import hashlib
import hmac
import time

api_key = "your_key"
api_secret = "your_secret"

nonce = int(round(time.time()*1000))

params = {"nonce": nonce}
params = urllib.urlencode(params)

H = hmac.new(api_secret, digestmod=hashlib.sha512)
H.update(params)
sign = H.hexdigest()

headers = {"Content-type": "application/x-www-form-urlencoded",
          "Key":api_key,
          "Sign":sign}
conn = httplib.HTTPSConnection("api.exmo.com")
conn.request("POST", "/v1/user_info", params, headers)
response = conn.getresponse()

print response.status, response.reason
print json.load(response)

conn.close()
источник

AS

Anatoliy S in pro.lua
Как я вижу шифрование идёт в строках
H = hmac.new(api_secret, digestmod=hashlib.sha512)
H.update(params)
sign = H.hexdigest()
источник

AS

Anatoliy S in pro.lua
по этим функциям пифона мануал найти несложно, например  https://docs.python.org/3/library/hmac.html
Только вот как это всё реализовать в луа?
источник

AN

Alex Novi in pro.lua
Anatoliy S
Спасибо, это навело меня на мысль  и я разобрался - да надо выполнить так https://api.exmo.com/v1/user_info?nonce=any, только не any а после равно нужно поставить время в миллисекундах с начала эпохи юникс, посмотрел их пример на пифоне там такие строки:   nonce = int(round(time.time()*1000)), погуглил что это за функция time.time() на пифоне и стало ясно
any имел ввиду что-то , но не знаю что ))) (p.s. надо было почитать доки)
источник

AN

Alex Novi in pro.lua
ну первое что вам нужно это библиотека для hash
источник

AN

Alex Novi in pro.lua
точно сейчас не вспомню но она есть
источник

AN

Alex Novi in pro.lua
вообще это просто поизите такие же библиотеки хэширования для lua
источник