API переводчика Microsoft Qt

У меня проблема с получением токена приложения для переводчика Microsoft с помощью QNetworkAccessManager. Это мой код:

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

и когда испускается сигнал finish(QNetworkReply*), я обнаружил, что ответ сервера вообще не содержит данных, он просто пуст! Кто-нибудь знает решение этой проблемы?
UPD Я проверил ответ на наличие ошибок и получил следующее: "Ошибка создания контекста ssl". Итак, я добавил библиотеки SSL в свой проект, но получил следующую ошибку - "Неизвестная ошибка". Любые идеи?


person Mikhail Zimka    schedule 21.07.2013    source источник
comment
У вас есть библиотеки DLL OpenSSL, скопированные в каталог вашего приложения?   -  person Cameron Tinker    schedule 22.07.2013
comment
Нет, но я использую -L[path_to_lib] -l[lib] для добавления библиотек OpenSSL в свой проект   -  person Mikhail Zimka    schedule 23.07.2013


Ответы (1)


Я использовал этот класс, подкласс 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.

person Cameron Tinker    schedule 23.07.2013