0
votes

I have a problem geting application token for Microsoft translator with QNetworkAccessManager. This is my code:

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

and when a finished(QNetworkReply*) signal is emitted I found that server reply contains no data at all, it is just empty! Does anyone know the solution of this problem?
UPD I checked a reply for errors and got the following: "Error creating ssl context". So I added SSL libs to my project, but got next error - "Unknown error". Any ideas?

1
Do you have the OpenSSL dlls copied to your application directory? - Cameron Tinker
No I don't, but I use -L[path_to_lib] -l[lib] to add OpenSSL libraries to my project - Mikhail Zimka

1 Answers

0
votes

I have used this class subclassed from QNetworkAccessManager to ignore SSL errors:

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;
}

This class overrides the createRequest method and ignores any SSL errors that may occur with the QNetworkReply returned.