2016-05-25 2 views
4

J'ai essayé d'appeler les API de bas niveau DynamoDB à partir du code C. Ceci est mon codeErreur lors de l'appel des API de bas niveau DynamoDB à partir du code C

#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; 
} 

Mais il produit une erreur lors de l'exécution comme

HTTP/1.1 400 Bad Request 

je faisais face principalement deux questions.

  1. J'ai aws_access_key_id et aws_secret_access_key. Comment créer une autorisation (SignedHeaders & Signature) en utilisant ces deux informations d'identification?
  2. Comment modifier "X-Amz-Target" pour la méthode de requête dynamo?
+0

Vous êtes toujours à la recherche d'une réponse? – Taterhead

+0

c'est difficile pour moi. parce que je me suis déplacé avec la passerelle api. Si vous donnez une solution pour cela, je peux améliorer ma vitesse de requête dynamo. il offre également de meilleures performances à mon programme. –

Répondre

0

Pouvez-vous utiliser le AWS SDK for C++? Il fera tout ce gros travail et plus pour vous. En fait, même si vous créez un programme C, vous pouvez exposer une structure extern C library aux appels AWS SDK dont vous avez besoin. Donc, de toute façon, je recommande de coder avec AWS SDK pour C++, et de créer un wrapper de bibliothèque externe C au cas où vous auriez besoin de compiler votre programme principal en tant que programme C.