C ++ libcurl标头 - 服务器无法识别

时间:2017-09-16 15:07:16

标签: c++ curl header lib

我在C ++中工作,libcurl编写了一个与某些API交互的程序,当我在标题中添加身份验证信息时,我感到困惑。我是libcurl和具有C ++基础知识的API的新手。身份验证需要API密钥和使用HMAC_SHA256进行散列的随机数,然后将每个随机数放入标头中。然后发送一个非常简单的JSON消息。我尝试过搜索这个网站,但大多数示例似乎是在javascript或命令行中,我没有看到任何相关的答案。

当我将POST消息发送到服务器时,我收到响应402 - 无效的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的加载,但是在格式化等方面一切都是相同的。我实际上没有使用散列签名,我&#39 ;在我能解决这个错误后,我会这样做。我尝试在冒号后添加一个空格并用双引号括起字符串和/或值,但我得到了相同的响应。我做错了什么意味着我的标题实际上并未被服务器识别?

1 个答案:

答案 0 :(得分:0)

解决:Blinktrade服务器返回&#34;无效的APIKey&#34;当您的API密钥不正确,但签名不正确时。一个相当烦人的错误标记。