2012-02-08 8 views
0

주위를 둘러 보았고 REST를 사용해야한다는 몇 가지 대답을 발견했습니다. 하지만 Qt/C++에서 어떻게 통합 할 수 있습니까? 누구나이 코드의 몇 가지 예 또는 몇 줄의 코드를 연결할 수 있습니까? 정말 고맙겠 어!C++을 사용하여 Azure blob 저장소에 액세스

+0

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

답변

1

this question을 확인하십시오. 그것은 당신이 물어 보는 것과 Azure 서비스에 접근하기 위해 통합 할 수있는 자유롭게 사용할 수있는 몇 가지 C++ 라이브러리에 대해 설명합니다.

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

누군가에게 도움이되기를 바랍니다.

관련 문제