Я не могу заставить работать API bittrex v3 на C

#c #api #curl

#c #API #curl

Вопрос:

Ни за что на свете я не могу заставить это работать. Я не смог найти пример кода для v3 API Bittrex, поэтому я исправил то, что я нашел для v1.1 и v3 на других языках программирования.

Я использую библиотеки curl и openssl.

Я получаю сообщение об ошибке «URL с использованием неправильного / незаконного формата или отсутствующего URL».

 #include "../curl/curl.h"
#include <sha512.hh>
#include "hmac.h"
#include "sha.h"

string bittKey, bittSecret;
string timeStamp, hTTPMethod, uRI, requestBody, contentHash;

CURL *curl;
CURLcode res;

curl = curl_easy_init();

bittKey =       "..."; 
bittSecret =    "...";
timeStamp = std::to_string(time(nullptr));
uRI = "https://api.bittrex.com/v3/balances";
hTTPMethod = "GET";
requestBody = "";
contentHash = sw::sha512::calculate(requestBody);

string preSign = timeStamp   uRI   hTTPMethod   contentHash;
string apiSign = hmac_sha512(preSign, bittSecret);

struct curl_slist* headerList = NULL;

headerList = curl_slist_append(headerList, "Accept: application/json");
headerList = curl_slist_append(headerList, "Content-Type: application/json");
headerList = curl_slist_append(headerList, ("Api-Key: "   bittKey).c_str());
headerList = curl_slist_append(headerList, ("Api - Signature: "   apiSign).c_str());
headerList = curl_slist_append(headerList, ("Api-Timestamp: "   timeStamp).c_str());
headerList = curl_slist_append(headerList, ("Api-Content-Hash: "   contentHash).c_str());

curl_easy_setopt(curl, CURLOPT_URL, uRI);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerList);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, amp;readBuffer);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);

res = curl_easy_perform(curl);

if (res != CURLE_OK)
    fprintf(stderr, "curl_easy_perform() failed: %sn", curl_easy_strerror(res));

curl_slist_free_all(headerList);
curl_easy_cleanup(curl);
 

Ответ №1:

После довольно долгого поиска и отладки с помощью библиотек curl решение было довольно простым.

     curl_easy_setopt(curl, CURLOPT_URL, uRI.c_str());
 

О, и временная метка работает не так, как у меня выше. Это работает следующим образом:

     using namespace std::chrono;
    milliseconds ms = duration_cast<milliseconds>(
        system_clock::now().time_since_epoch()
        );

    timeStamp = std::to_string(ms.count());
 

Сейчас API работает.