2016-05-25 3 views
4

CコードからDynamoDB低レベルAPIを呼び出しようとしました。これは私のコードDynamoDB低レベルAPIを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; 
} 

である。しかし

HTTP/1.1 400 Bad Request 

のように実行している間、それは私は主に二つの問題に直面したエラーを生成します。

  1. 私はaws_access_key_idとaws_secret_access_keyを持っています。これら2つの資格情報を使用して承認(SignedHeaders &署名)を作成する方法は?
  2. ダイナモクエリメソッドの "X-Amz-Target"の変更方法は?
+0

あなたはまだこの回答をお探しですか? – Taterhead

+0

私にとっては難しいです。私はAPIゲートウェイと一緒に移動したので。あなたがこれを解決するなら、ダイナモのクエリ速度を向上させることができます。私のプログラムではより良いパフォーマンスを提供します。 –

答えて

0

AWS SDK for C++を使用できますか?それはあなたのためにこのすべての重い持ち上げを行います。実際には、Cプログラムを作成していても、必要なAWS SDK呼び出しにextern C library構造体を公開することができます。したがって、どちらの方法でも、私はAWS SDK for C++をコーディングし、メインプログラムをCプログラムとしてコンパイルする必要がある場合に備えて、extern Cライブラリラッパーを作成することをお勧めします。

関連する問題