2012-02-08 3 views
0

Оглядывался и нашел несколько ответов, которые предполагают, что я должен использовать REST. Но как бы интегрировать это в Qt/C++? Можно ли связать некоторые примеры этого или, может быть, нескольких строк кода? Было бы очень признательно!Доступ к хранилищу памяти Azure с использованием C++

+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())); 

Надеюсь, это поможет кому-то.

Смежные вопросы