2013-07-21 70 views
0

我在使用QNetworkAccessManager爲Microsoft翻譯器創建應用程序令牌時遇到問題。這是我的代碼:Microsoft翻譯器API Qt

QUrl serverUrl("https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"); 
QNetworkRequest request(serverUrl); 
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 
QUrl postData; 
postData.addQueryItem("grant_type", "client_credentials"); 
postData.addQueryItem("client_id", ClientID); 
postData.addQueryItem("client_secret", ClientSecret); 
postData.addQueryItem("scope", "http://api.microsofttranslator.com"); 
networkAccessManager->post(request, postData.encodedQuery()); 

,當成品(QNetworkReply *)信號發出,我發現服務器響應不包含任何數據的話,那就是空的!有誰知道這個問題的解決方案?
UPD我檢查了錯誤的回覆,得到以下結果:「創建ssl上下文時出錯」。所以我添加了SSL libs到我的項目中,但得到了下一個錯誤 - 「未知錯誤」。有任何想法嗎?

+0

您是否將OpenSSL dll複製到您的應用程序目錄? –

+0

不,我沒有,但我使用-L [path_to_lib] -l [lib]將OpenSSL庫添加到我的項目中 –

回答

0

我已經使用這個類從QNetworkAccessManager子類忽略SSL錯誤:

sslqnetworkaccessmanager.h

#ifndef SSLQNETWORKACCESSMANAGER_H 
#define SSLQNETWORKACCESSMANAGER_H 
#include <QtNetwork> 
#include <QtCore> 

class SslQNetworkAccessManager : public QNetworkAccessManager 
{ 
    Q_OBJECT 
public: 
    explicit SslQNetworkAccessManager(QObject *parent = 0); 


protected: 
    QNetworkReply* createRequest(Operation op, const QNetworkRequest & request, QIODevice * outgoingData = 0); 
}; 

#endif // SSLQNETWORKACCESSMANAGER_H 

sslqnetworkaccessmanager.cpp

#include "sslqnetworkaccessmanager.h" 

SslQNetworkAccessManager::SslQNetworkAccessManager(QObject *parent) 
    : QNetworkAccessManager(parent) 
{ 
} 

QNetworkReply* SslQNetworkAccessManager::createRequest(Operation op, const QNetworkRequest& request, QIODevice* outgoingData) 
{ 
    QNetworkRequest req(request); 
    QNetworkReply* reply = QNetworkAccessManager::createRequest(op, req, outgoingData); 
    reply->ignoreSslErrors(); 

    return reply; 
} 

該類覆蓋的createRequest方法並忽略任何SSL錯誤這可能會在QNetworkReply返回時發生。