gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:41:39 25 4
gpt4 key购买 nike

我尝试从 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: %s\n",
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

我主要面临两个问题。

  1. 我有 aws_access_key_id 和 aws_secret_access_key。如何使用这两个凭据创建授权(SignedHeaders 和签名)?
  2. 如何为 dynamo 查询方法修改“X-Amz-Target”?

最佳答案

你能使用 AWS SDK for C++ 吗? ?它将为您完成所有这些繁重的工作,甚至更多。实际上,即使你正在编写 C 程序,你也可以公开一个 extern C library。结构到您需要的 AWS 开发工具包调用。因此,无论哪种方式,我都建议针对适用于 C++ 的 AWS 开发工具包进行编码,并创建一个外部 C 库包装器,以防您需要将主程序编译为 C 程序。

关于c - 从 C 代码调用 DynamoDB 低级 API 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37434929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com