2013-07-21 7 views
0

У меня проблема с получением токена приложения для переводчика Microsoft с помощью QNetworkAccessManager. Это мой код:API-интерфейс переводчика Microsoft 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-файлы в свой проект, но получил следующую ошибку: «Неизвестная ошибка». Есть идеи?

+0

У вас есть DLL OpenSSL, скопированные в ваш каталог приложений? –

+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.