2017-09-16 13 views
0

Je travaille en C++ avec libcurl qui écrit un programme pour interagir avec certaines API et je suis bloqué quand il s'agit d'ajouter des informations d'authentification dans les en-têtes. Je suis nouveau dans libcurl et API avec une connaissance de base de C++. L'authentification requiert une clé API et un nonce haché avec HMAC_SHA256, chacun étant ensuite placé dans les en-têtes. Un message JSON très simple est ensuite envoyé. J'ai essayé de chercher à travers ce site mais la plupart des exemples semblent être en javascript ou en ligne de commande, et je ne vois pas de réponses pertinentes en eux.En-têtes libcurl C++ - non reconnus par le serveur

Lorsque j'envoie mon message POST au serveur, j'obtiens une réponse 402 - ApiKey invalide. Ma clé API est 100% correcte, donc je suppose que c'est quelque chose à voir avec le formatage ou la façon dont je l'ai inclus dans l'en-tête. Le site est BlinkTrade et leur documentation est here, ce qui donne quelques informations sur les exigences d'en-tête.

extrait de code

ci-dessous:

char* message="{\"MsgType\": \"U2\",\"BalanceReqID\": 1}"; 
curl_easy_setopt(curl, CURLOPT_URL, "https://api.blinktrade.com/tapi/v1/message"); 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite); 
curl_easy_setopt(curl, CURLOPT_WRITEDATA, pFile2); 
curl_easy_setopt(curl, CURLOPT_POST, 1L); 
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, message); 

struct curl_slist *header = NULL; 
header = curl_slist_append(header, "APIKey:0000000000000000000000000000000000000000");  
header = curl_slist_append(header, "Nonce:1"); 
header = curl_slist_append(header, "Signature:1"); 
header = curl_slist_append(header, "Content-Type:application/json"); 
transfer = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header); 
cout << transfer << endl; 

transfer = curl_easy_perform(curl); 
cout << transfer << endl; 

Et je reçois le code de retour 0 pour curl_easy_setopt et curl_easy_perform. J'ai changé les caractères réels de la clé API pour une charge de 0, mais sinon tout est identique en termes de formatage, etc. Je n'ai pas réellement utilisé une signature hachée, je le ferai après que je puisse résoudre ce problème. Erreur. J'ai essayé d'ajouter un espace après le signe deux-points et la chaîne de caractères et/ou la valeur entre guillemets mais j'ai la même réponse. Qu'est-ce que je fais de mal cela signifie que mes en-têtes ne sont pas reconnus par le serveur?

+0

Votre signature ne ressemble pas 'HMAC-SHA256' de quelque chose. Est-ce aussi juste un échantillon ou une valeur réelle? –

+0

@ArtemyVysotsky Je soumets une valeur de 1 en espérant obtenir une réponse du serveur pour une signature invalide, plutôt qu'une API invalide (essayant juste de contrôler toutes les autres variables jusqu'à ce que je puisse résoudre ce problème). Si vous savez comment cela devrait être ajouté, cela vous aidera-t-il? – Jamieh

+0

vous pouvez le voir par vous-même https://www.freeformatter.com/hmac-generator.html - mettre votre nonce comme valeur et la clé comme secret et sélectionnez SHA256 –

Répondre

0

Résolu: le serveur Blinktrade renvoie "APIval Invalid" non lorsque la clé de votre API est incorrecte, mais lorsque la signature est incorrecte. Un mauvais étiquetage plutôt ennuyeux.