从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)? 解决方法
你能用
AWS SDK for C++吗?它将为您完成所有这些繁重的工作.实际上,即使您正在制作C程序,也可以将
extern C library结构公开给您需要的AWS SDK调用.因此,无论哪种方式,我建议使用AWS SDK for C进行编码,并创建一个extern C库包装器,以防您需要将主程序编译为C程序.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |