Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Помогите с POST запросом на Qt.


Автор: Izosin 9.7.2018, 14:20
Решил создать свой торговый бот, но никак не могу победить post запросы. Get пошел на УРА, а вот на post полный стопор.

Не могу понять как правильно заполнить заголовок запроса:
Код

Код

    nonce = 123457;
    QString nonce_ = QString::number(nonce);
    QString st = "nonce=" + nonce_;
 
    QString key = "S-";
    QMessageAuthenticationCode code(QCryptographicHash::Sha512);
    code.setKey(key.toUtf8());
    code.addData(st.toUtf8());
    QByteArray Signature = code.result().toHex();
    ui->textBrowser->insertPlainText(Signature);
    ui->textBrowser->insertPlainText("\n");
 
    QByteArray reqdata;
 
    QNetworkRequest request;
    request.setUrl(QUrl("https://api.exmo.me/v1/user_info"));
    request.setRawHeader("Key", "K-");
    request.setRawHeader("Sign", Signature);
    qDebug() << request.rawHeaderList();
    qDebug() << Signature;
 
    QNetworkAccessManager *manager2 = new QNetworkAccessManager(this);
    connect(manager2, SIGNAL(finished(QNetworkReply*)), this, SLOT(on_load(QNetworkReply*)));
    manager2->post(request,reqdata);
 


Выдает ошибку: 40007: Incorrect format parameter 'nonce'

Есть рабочий пример написанный на Python, немного видоизменил его что бы он посылал только один запрос, с теми же параметрами что и у меня. Параметр Sign совпадает до последнего символа. Python выдает корректный ответ. Никак не могу понять в чем моя ошибка.

Требования сайта звучат следующим образом:

Цитата

Authenticated API

Для доступа к данному API требуется авторизация и необходимо использовать POST метод.

URL — необходимо использовать следующий адрес https://api.exmo.me/v1/{api_name} где api_name - это наименование API метода

Авторизация осуществляется с помощью отправки на сервер следующих заголовков:

Key — Публичный ключ, его нужно взять настройках профиля пользователя
(пример: K-7cc97c89aed2a2fd9ed7792d48d63f65800c447b)

Sign — POST данные (param=val&param1=val1), подписанные секретным ключом методом HMAC-SHA512, секретный ключ также нужно брать в настройках профиля пользователя.


На другом форуме мне посоветовали отследить трафик с помощью программы WireShark. Но ничего у меня не получилось. Пакеты были настолько разные, что мне кажется они шифрованные. Единственная мысль что ответ от сайта ругается на параметр который передается в зашифрованном виде, вместе с другими параметрами. Получается сайт видит эти данные но не может расшифровать, или эти данные каким либо образом изменяются перед передачей на сайт. Может все дело в настройках ssl, может что то нужно указать явным образом?

Короче говоря: знаний и опыта пока мне не хватает победить эту проблему. Помогите кто чем сможет.

Автор: _zorn_ 10.7.2018, 15:01
Цитата(Izosin @  9.7.2018,  21:20 Найти цитируемый пост)
Пакеты были настолько разные, что мне кажется они шифрованные.
 Ну вообще то там https. Его перехватывать сложнее. Но на своем компе ты хозяин. Можно например с помощью https://www.charlesproxy.com/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)