加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从C代码调用DynamoDB低级API时出错

发布时间:2020-12-16 06:51:58 所属栏目:百科 来源:网络整理
导读:我试图从C代码调用DynamoDB低级API.这是我的代码 #include stdio.h#include curl/curl.hint main(void){ CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { struct curl_slist *chunk = NULL; chunk = curl_slist_append(chunk,"Host: dynamod
我试图从C代码调用DynamoDB低级API.这是我的代码

#include <stdio.h>
#include <curl/curl.h>


int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    struct curl_slist *chunk = NULL;

    chunk = curl_slist_append(chunk,"Host: dynamodb.us-east-1.amazonaws.com;");    
    chunk = curl_slist_append(chunk,"Accept-Encoding: identity;");
    chunk = curl_slist_append(chunk,"Content-Length: 53;");    
    chunk = curl_slist_append(chunk,"User-Agent: CustomApp42;");
    chunk = curl_slist_append(chunk,"Content-Type: application/x-amz-json-1.0;");
    chunk = curl_slist_append(chunk,"Authorization: AWS4-HMAC-SHA256 Credential=<Credential>,SignedHeaders=<Headers>,Signature=<signature>;");   
    chunk = curl_slist_append(chunk,"X-Amz-Date: 4.4.2016 ;");
    chunk = curl_slist_append(chunk,"X-Amz-Target: DynamoDB_20120810.GetItem;");

    res = curl_easy_setopt(curl,CURLOPT_HTTPHEADER,chunk);

    curl_easy_setopt(curl,CURLOPT_URL,"dynamodb.us-east-1.amazonaws.com");
    curl_easy_setopt(curl,CURLOPT_VERBOSE,1L);
    curl_easy_setopt(curl,CURLOPT_POSTFIELDS,"{"TableName":"Pets","Key":{"AnimalType":{"S": "Dog"},"Name": {"S": "Fido"}}}");
    res = curl_easy_perform(curl);
    /* Check for errors */ 
    if(res != CURLE_OK)
      fprintf(stderr,"curl_easy_perform() failed: %sn",curl_easy_strerror(res));

    /* always cleanup */ 
    curl_easy_cleanup(curl);

    /* free the custom headers */ 
    curl_slist_free_all(chunk);
  }
  return 0;
}

但它在运行时会产生错误

HTTP/1.1 400 Bad Request

我主要面对两个问题.

>我有aws_access_key_id和aws_secret_access_key.如何使用这两个凭据创建授权(SignedHeaders& Signature)?
>如何修改发电机查询方法的“X-Amz-Target”?

解决方法

你能用 AWS SDK for C++吗?它将为您完成所有这些繁重的工作.实际上,即使您正在制作C程序,也可以将 extern C library结构公开给您需要的AWS SDK调用.因此,无论哪种方式,我建议使用AWS SDK for C进行编码,并创建一个extern C库包装器,以防您需要将主程序编译为C程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读