2012-02-08 16 views
0

これを見て、RESTを使用する必要があることを示唆する回答がいくつか見つかりました。しかし、どうすればQt/C++に統合できますか?誰かがこのコードのいくつかの例をリンクすることができますか?本当に感謝しますか?C++を使用してAzureブロブストレージにアクセス

+0

http://stackoverflow.com/questions/8471810/accessing-azure-storage-tables-from-c-code/9476451#9476451 – chikuba

答えて

1

this questionをご覧ください。これは、自由に利用できるC++ライブラリのカップルを尋ねるもので、Azureサービスにアクセスするために組み込むことができます。

2

私はそれを達成するのに多くの時間がかかりました。最も難しいことは、主キーをデコードする必要があることです。 this questionの助けを借りて、私はOpenSSLを使用することに決めました。私は次のコードを作成しました。

QString datastring = "GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:" + date + "\nx-ms-version:2009-09-19\n/myStorage/\ncomp:list"; 
QByteArray ba = datastring.toUtf8(); 

unsigned char* signature = reinterpret_cast<unsigned char*>(ba.data()); 
QByteArray kba = QByteArray::fromBase64("theStorageAccountKey"); 
unsigned char* key = (unsigned char*) kba.data(); 
unsigned char result[EVP_MAX_MD_SIZE]; 
unsigned int result_len; 
ENGINE_load_builtin_engines(); 
ENGINE_register_all_complete(); 

HMAC_CTX ctx; 
HMAC_CTX_init(&ctx); 
HMAC_Init_ex(&ctx, key, strlen((const char*)key), EVP_sha256(), NULL); 
HMAC_Update(&ctx, signature, strlen((const char*)signature)); 
HMAC_Final(&ctx, result, &result_len); 
HMAC_CTX_cleanup(&ctx); 

QByteArray array = QByteArray::fromRawData((char*)result, result_len); 
array = array.toBase64(); 
qDebug() << "signature hash" << array; 

QString version = "2009-09-19"; 

//requesting the list of container to Windows Azure 
QNetworkAccessManager* manager = new QNetworkAccessManager(); 
QNetworkRequest request; 
request.setUrl(QUrl("http://myStorage.blob.core.windows.net/?comp=list")); 
request.setRawHeader("Authorization","SharedKey myStorage:" + array); 
request.setRawHeader("x-ms-date", date.toStdString().c_str()); 
request.setRawHeader("x-ms-version", version.toStdString().c_str()); 
QNetworkReply *reply = manager->get(request); 
connect(reply, SIGNAL(readyRead()), this, SLOT(manageCloudReply())); 

私はそれが誰かを助けることを願っています。

関連する問題