Вверх ↑
Этот топик читают: Гость
Ответов: 4630
Рейтинг: 749
#16: 2019-11-15 14:51:16 ЛС | профиль | цитата
Верятно, ключи к API все-же надо убрать из схем.
карма: 26

0
Ответов: 24
Рейтинг: 0
#17: 2019-11-15 15:15:46 ЛС | профиль | цитата
Ничего, они только для чтения. И их срок годности 30 дней
карма: 0

0
Ответов: 24
Рейтинг: 0
#18: 2019-11-16 06:19:31 ЛС | профиль | цитата
Проблема была в том, что дата закодированная в URL, получала символы такие как %3A из за чего format воспринимает его за точку данных и происходит каша.
карма: 0

0
Ответов: 24
Рейтинг: 0
#19: 2019-12-01 03:33:20 ЛС | профиль | цитата
Народ, помогите мне еще, у меня всё равно возникла проблема, оказалось там есть POST запросы, а я вообще не могу представить куда пихать цифровую подпись и её параметры в POST запрос.
То ли это в заголовках то ли в теле, всё перерыл ни одного примера пост-запросов они не приводят в хелпе.

Подскажите мне на этом примере:
https://huobiapi.github.io/docs/spot/v1/en/#trading

POST https://api.huobi.pro/v1/order/orders/place

{
"account-id": "10238014",
"amount": "10.1",
"price": "6000.1",
"source": "api",
"symbol": "btcusdt",
"type": "buy-limit",
"client-order-id": "a0001"
}

Где должны быть параметры авторизации? Как я понимаю стандартный елемент http тут не подходит и надо самому как то составить запрос и отправить через TCP клиент


--- Добавлено в 2019-12-01 03:34:54

Начинаю составлять что то такое, и попадаю в ступор - что делать дальше:

POST / HTTP/1.0\r\n
Host: api.huobi.pro/v1/order/orders\r\n
Content-Type: application/json\r\n
Content-Length: 35\r\n
\r\n
{
"account-id": "10238014",
"amount": "10.1",
"price": "6000.1",
"source": "api",
"symbol": "btcusdt",
"type": "buy-limit",
"client-order-id": "a0001"
}

--- Добавлено в 2019-12-01 04:06:54

Если кто составит мне схемку работающий POST запрос, готов оплатить.

Редактировалось 7 раз(а), последний 2019-12-01 05:42:18
карма: 0

0
Ответов: 537
Рейтинг: 14
#20: 2019-12-01 08:20:08 ЛС | профиль | цитата
POST запрос можно так отправить, но нужно еще Cookie добавить на точку Headers, компонент тут https://forum.hiasm.com/getfile/38806, Cookie берутся из Internet Explorer, нужно сначала зайти на сайт, а компонент CookieManager https://forum.hiasm.com/topic/62708 выдаст куки, таким образом вы запрос отправите с авторизацией.
Add(MainForm,2953706,49,427)
{
 Width=633
 Height=528
}
Add(VisualStrings,16745096,238,308)
{
 Lines=#19:account-id=10238014|11:amount=10.1|12:price=6000.1|10:source=api|14:symbol=btcusdt|14:type=buy-limit|21:client-order-id=a0001|
 Width=116
 Height=102
}
Add(HTTP_Get,1307438,217,434)
{
 URL=""https://api.huobi.pro/v1/order/orders/place"
 UserAgent="Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
 Method=1
 Point(PostData)
 Point(Headers)
 link(onDownload,15198464:doConvert,[])
 link(PostData,16745096:Text,[])
 link(Headers,4617165:Cookies,[])
}
Add(StreamConvertor,15198464,273,441)
{
 Mode=6
 link(onResult,2413311:doAdd,[])
}
Add(Memo,2413311,329,441)
{
 Left=5
 Top=5
 Width=610
 Height=435
 ScrollBars=2
}
Add(Button,14189931,112,427)
{
 Left=10
 Top=450
 Width=60
 Height=25
 Caption="Запрос"
 link(onClick,15716004:doEvent1,[])
}
Add(CookieManager,4617165,245,252)
{
 Point(doGetIECookies)
}
Add(Hub,15716004,168,427)
{
 link(onEvent1,4617165:doGetIECookies,[(201,433)(201,286)])
 link(onEvent2,1307438:doDownload,[])
}


Редактировалось 1 раз(а), последний 2019-12-01 08:20:52
карма: 4

0
Ответов: 24
Рейтинг: 0
#21: 2019-12-01 08:33:59 ЛС | профиль | цитата
Благодарствую, но такой метод не подходит.

У меня может обслуживаться по многу пар API ключей. И логинить их в IE не возможно.
Мне нужна настоящая авторизация, с подписью HMAC, там выше в теме уже всё готово и оно работает, просто в хелпе они описали авторизацию для GET, и тупо абзац с намёком мол "для POST сделайте всё тоже самое".
Но это приводит в замешательство, потому что у POST куча отличий, типа разделители переменных и заголовки другие, и сложно понять как сформировать подпись и даже как её корректно прикрепить не написано в API.

про POST они сказали пару слов всего:

Required and optional parameters: Each action has a set of required and optional parameters that define the API call.This shows in the API reference.Important Reminder: Every param in a GET method should be included in signature calculation, and only AccessKeyId, SignatureMethod, SignatureVersion, Timestamp should be included in signature calculation for a POST method.


--- Добавлено в 2019-12-01 08:36:43

это API позволяет работать по HTTP без "S", по этому вроде должно быть не сложно, для тех кто понимает в этом
https://github.com/huobiapi/API_Docs_en/wiki/Signing_API_Requests

--- Добавлено в 2019-12-01 09:09:07

Вот схемка-заготовка, как в теории всё должно было выглядеть, но оно конечно же не работает:


Add(MainForm,4316327,84,168)
{
 Width=1039
 Height=823
 SavePosName="awkertgnvaeilrtlv"
 Position=1
}
Add(Button,3906501,259,154)
{
 Left=10
 Top=10
 Width=80
 Height=25
 link(onClick,15671646:doEvent1,[])
}
Add(Memo,1227602,1260,161)
{
 Left=5
 Top=130
 Width=1000
 Height=315
 ScrollBars=3
}
Add(Time,3467125,637,98)
{
 Format="Y-M-D h:m:s"
 Point(DateTime)
}
Add(Label,11494199,168,77)
{
 Left=110
 Top=15
 Width=69
 Height=17
 Caption="AccessKeyId:"
}
Add(Edit,765236,903,28)
{
 Left=190
 Top=10
 Width=370
 Text="ghxertfvbf-ae071afe-585ebe3a-bcd73"
}
Add(Label,15772714,168,147)
{
 Left=110
 Top=63
 Width=44
 Height=17
 Caption="Order-id:"
}
Add(Memory,14125193,840,161)
{
 link(onData,1388585:doString,[])
}
Add(HMAC,5918340,980,161)
{
 Algorithm=2
 Key="f817d802-1b5e62de-2aac943c-9a9a8"
 link(onResult,5699817:doConvert,[])
 link(Data,1388585:FString,[(986,140)(948,140)(948,205)(909,205)])
 link(Key,7249632:Text,[])
}
Add(FormatStr,1388585,903,161)
{
 DataCount=4
 Mask="POST\napi.huobi.pro\norder/orders\nAccessKeyId=%1&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=%4"
 Point(FString)
 link(onFString,5918340:doCalcHMAC,[])
 link(Str1,765236:Text,[])
 link(Str4,14125193:Value,[(930,145)(887,145)(887,205)(846,205)])
}
Add(Charset,1075868,1127,161)
{
 Type=12
 link(onCharset,8882164:doStrCat,[])
}
Add(StreamConvertor,5699817,1029,161)
{
 Mode=3
 link(onResult,10685303:doCharset,[])
}
Add(Charset,10685303,1078,161)
{
 Type=5
 link(onCharset,1075868:doCharset,[])
}
Add(Edit,7490427,371,91)
{
 Left=190
 Top=85
 Width=370
 Text="+2"
}
Add(DateConvertor,7965468,742,161)
{
 Mode=9
 Format="yyyy-MM-ddTHH:mm:ss"
 link(onResult,9089547:doCharset,[])
}
Add(DoData,13076185,490,161)
{
 link(onEventData,439421:doConvert,[])
 link(Data,3279260:Var3,[(496,138)])
}
Add(DateConvertor,439421,539,161)
{
 Mode=8
 Format="HH"
 link(onResult,8757127:doOperation,[])
}
Add(Charset,9089547,791,161)
{
 Type=12
 link(onCharset,14125193:doValue,[])
}
Add(Math,12997737,644,161)
{
 OpType=1
 link(onResult,12368625:doWork2,[])
 link(Op1,2464389:Var2,[])
}
Add(Math,8757127,588,161)
{
 OpType=35
 Op2=0.000000001
 link(onResult,12997737:doOperation,[])
}
Add(Label,3425802,168,182)
{
 Left=110
 Top=87
 Width=53
 Height=17
 Caption="Timezone:"
}
Add(Math,7617945,371,154)
{
 OpType=34
 link(onResult,6816478:doCompare,[])
 link(Op1,14121290:Var2,[])
}
Add(If_else,6816478,420,154)
{
 Op2=Integer(-1)
 link(onTrue,2121148:doData,[(460,160)(460,223)])
 link(onFalse,13076185:doData,[])
}
Add(GetDataEx,14121290,371,133)
{
 link(Data,7490427:Text,[])
}
Add(DoData,2121148,469,217)
{
 link(onEventData,9240877:doTrim,[])
 link(Data,3279260:Var2,[])
}
Add(GetDataEx,3279260,469,133)
{
 Angle=3
 link(Data,14121290:Var3,[])
}
Add(Trim,9240877,518,217)
{
 Char="-"
 Mode=1
 link(onTrim,9155591:doConvert,[])
}
Add(DateConvertor,9155591,567,217)
{
 Mode=8
 Format="HH"
 link(onResult,11703131:doOperation,[])
}
Add(Math,11703131,616,217)
{
 OpType=35
 Op2=0.000000001
 link(onResult,402788:doOperation,[])
}
Add(Math,402788,679,217)
{
 link(onResult,12368625:doWork3,[(725,223)])
 link(Op1,2464389:Var3,[(685,145)])
}
Add(GetDataEx,2464389,644,140)
{
 link(Data,3467125:DateTime,[])
}
Add(HubEx,12368625,721,161)
{
 link(onEvent,7965468:doConvert,[])
}
Add(Edit,7249632,987,70)
{
 Left=190
 Top=35
 Width=370
 Text="b86edebd-003ffa1d-e17aebd6-9668e"
}
Add(Label,3189680,168,112)
{
 Left=110
 Top=38
 Width=56
 Height=17
 Caption="SecretKey:"
}
Add(HTTPClient,6023390,658,483)
{
 URL="http://api.huobi.pro/v1/order/orders/place"
 Method=1
 Point(RawHeaders)
 Point(Headers)
 Point(PostData)
 link(onHeadersAvail,7347341:doData,[])
 link(onFinish,15723512:doWork3,[(795,496)])
 link(Headers,8882164:Result,[(678,468)(1182,468)])
 link(PostData,16745096:Text,[])
 AddHint(-73,52,44,13,Method)
 AddHint(-73,73,44,16,)
}
Add(Memo,11083271,854,483)
{
 Left=5
 Top=455
 Width=990
 Height=320
 ScrollBars=3
}
Add(VisualStrings,16745096,679,336)
{
 Lines=#19:account-id=10238014|11:amount=10.1|12:price=6000.1|10:source=api|14:symbol=btcusdt|14:type=buy-limit|21:client-order-id=a0001|
 Width=116
 Height=102
}
Add(Hub,15671646,329,154)
{
 link(onEvent1,7617945:doOperation,[])
 link(onEvent2,6023390:doLoadString,[(361,167)(361,489)])
}
Add(DoData,7347341,735,483)
{
 link(onEventData,15723512:doWork2,[])
 link(Data,6023390:RawHeaders,[(741,475)(713,475)(713,527)(685,527)])
}
Add(StrCat,8882164,1176,161)
{
 Str1="Signature: "
 link(onStrCat,1227602:doAdd,[])
}
Add(HubEx,15723512,791,483)
{
 link(onEvent,11083271:doAdd,[])
}


Редактировалось 3 раз(а), последний 2019-12-01 09:09:07
карма: 0

0
Ответов: 537
Рейтинг: 14
#22: 2019-12-01 11:33:50 ЛС | профиль | цитата
Я зарегистрировался и с обычного браузера заходит на сайт. Есть браузер для Hiasm Firefox, можно с него заходить на сайт, дальше что нужно, получить информацию на автомате, так можно и без API обойтись. Или авторизовываться в браузере Firefox, он куки получит, достать их, они хранятся в .sqlite и добавлять их в моей схеме.

Редактировалось 1 раз(а), последний 2019-12-01 11:39:18
карма: 4

0
Ответов: 24
Рейтинг: 0
#23: 2019-12-01 14:22:54 ЛС | профиль | цитата
У меня задачка, одной кнопкой купить или продать у 100 человек, по их ключам (с одного компа). И даже теоретически залогиненые браузеры, по таймауту, биржа обратно разлогинит.
Тут надо именно полноценное подключение по API.

Редактировалось 5 раз(а), последний 2019-12-02 02:01:17
карма: 0

0
Ответов: 24
Рейтинг: 0
#24: 2019-12-02 07:45:21 ЛС | профиль | цитата
Разобрался с авторизацией. Разбираюсь с загрузкой POST данных, временно отбой задачки

--- Добавлено в 2019-12-02 07:48:42

Вроде справился, всё работает. Если столкнуть с новой проблемой снова сюда обращусь за помощью. Всем спасибо.

Редактировалось 2 раз(а), последний 2019-12-02 07:48:42
карма: 0

0
Ответов: 4630
Рейтинг: 749
#25: 2019-12-02 11:58:32 ЛС | профиль | цитата
POST и HTTPS решаются с помощью HTTPClient. Подпись, вероятно, как и раньше, указывается в GET (в URL).
карма: 26

0
Ответов: 24
Рейтинг: 0
#26: 2019-12-02 14:58:37 ЛС | профиль | цитата
Так и есть
карма: 0

0
26
Сообщение
...
Прикрепленные файлы
(файлы не залиты)