#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 работает.