2013-11-04 105 views
1

我現在正在爲一段代碼苦苦掙扎,我在想如果有人能幫我理解這段代碼片段。我不要求對任何代碼,就有人向我解釋這個請:(一URI似乎是完整的URL到服務)Qt代碼解析

void RestClient::_prepareRequest(QNetworkRequest& a_request, const QString& a_uri){ 
     QSslConfiguration config(QSslConfiguration::defaultConfiguration()); 
     config.setProtocol(QSsl::SslV3); 
     config.setSslOption(QSsl::SslOptionDisableServerNameIndication, true); 
     a_request.setSslConfiguration(config); 
     a_request.setRawHeader("Accept", "application/xml"); 
     a_request.setRawHeader("Content-Type", "application/x-www-form-urlencoded"); 
     QByteArray l_api_key; l_api_key.append(toQString(m_api_key)); 
     QByteArray l_request_hash; 
    l_request_hash.append(toQString(_buildRequestHash(toStlString(a_uri)))); 
     a_request.setRawHeader("EMApikey", l_api_key); 
     a_request.setRawHeader("EMRequestHash", l_request_hash); 


     a_request.setUrl(QUrl(a_uri)); 
    } 
+2

a_uri似乎是URL。其餘的則組裝一個http(s)請求。你特別喜歡哪一點? –

+0

謝謝你回答Osterfeld先生。我正在用setRawHeader方法掙扎,它們是幹什麼用的?我找不到答案。此外,爲什麼Http請求很長。我看到一些比這個更短的請求。預先感謝您的任何答案。 –

回答

2

所以,你有什麼有服用兩個功能參數,對QNetworkRequest的引用以及對您希望訪問的URI的常量引用(QString)。接下來的行設置爲QSslConfiguration以獲取Qt網絡訪問的默認SSL配置,並將其存儲在配置中。然後,它會設置一些QSsl選項,然後設置a_request的SSL設置由您剛剛設置的config提供。

接下來它設置請求的HTTP標頭,所以這些都是合理標準化的,所以Accept引用什麼樣的信息是用於從在這種情況下是xmlAccept header documentation)服務器的響應是可接受的。 Content-type通知接收方服務器您在請求正文中發送了哪些數據。

最後一個階段設置一個非標準的HTTP頭,它用於應用程序API訪問鍵,然後它設置您最初傳遞的URL和函數完成的URL。在此之後,QNetworkRequest可以與QNetworkAccessManager一起使用,將請求發送到服務器,並使用編碼的API密鑰,您將收到XML響應作爲回報。

+0

謝謝您花時間回答,很好的解釋!非常感謝你 ! –

+0

如果它對我沒有好奇,我可以問你,如果你在objective-c中爲ios編碼? –

+0

是的,我也做了一些Objective-C。 –