2017-09-16 8 views
0

私はlibcurlでC++で作業していますが、いくつかのAPIとやりとりするプログラムを記述しています。ヘッダに認証情報を追加することになります。私はlibcurlとAPIの初心者で、C++の基礎知識があります。認証には、APIキーとHMAC_SHA256でハッシュされたノンスが必要です。それぞれHMAC_SHA256はヘッダーに配置されます。その後、非常に単純なJSONメッセージが送信されます。私はこのサイトを検索しようとしましたが、ほとんどの例はjavascriptやコマンドラインにあるようですが、関連する回答は表示されません。C++ libcurlヘッダ - サーバで認識されない

POSTメッセージをサーバーに送信すると、402 - Invalid ApiKeyという応答が表示されます。私のAPIキーは100%正しいので、それは書式設定やヘッダーにインクルードした方法と関係があると思われます。サイトはBlinkTradeで、その文書はhereで、ヘッダ要件に関する情報を提供しています。以下

コードスニペット:

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; 

は、と私はcurl_easy_setoptとcurl_easy_performの戻りコード0を取得します。私は実際の文字をAPIキーから入れ替えて0の読み込みをしましたが、それ以外の場合は書式の点で同じです。実際にハッシュされた署名は使用されていませんでした。エラー。私はコロンの後ろに空白を追加しようとしましたが、文字列や二重引用符で囲まれた値を囲みましたが、同じ応答が返ってきました。私が間違っているのは、私のヘッダーがサーバーによって実際に認識されないということですか?

+0

あなたの署名は何かの 'HMAC-SHA256'のようには見えません。それは単なるサンプルか本当の価値ですか? –

+0

@ArtemyVysotsky無効な署名ではなく、無効な署名でサーバーの応答を得ることを望んでいます(この問題を修正するまで、他のすべての変数を制御しようとしています)。私がそれに来るときに役立つ、これがどのように追加されるべきか知っていれば、文字列として追加されただけですか? – Jamieh

+0

あなたはそれを自分で見ることができますhttps://www.freeformatter.com/hmac-generator.html - ナンスを値として入れ、秘密としてキーを押して、SHA256を選択します –

答えて

0

解決済み:BlinktradeサーバーはAPIキーが間違っている場合ではなく、署名が正しくない場合、「無効なAPIKey」を返します。むしろ面倒な誤った表記です。

関連する問題