Hi,

I'm porting a Qt5-based little downloader from MS Windows to Mac+Linux (both 
have Qt 5.8.0). It uses a POST operation to authenticate with the server, using 
code that works fine on MSWin and Linux. On Mac, I keep getting a Forbidden 
reply from the server (the MSWin executable functions fine under Wine, 
though...)

The request is set up like this::

        QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
        QNetworkConfigurationManager configurationManager;
        { QEventLoop loop;
                loop.connect(&configurationManager, SIGNAL(updateCompleted()), 
SLOT(quit()));
                emit messageLog(tr("Check API: updating network configuration 
info"));
                configurationManager.updateConfigurations();
                // wait for the update to run.
                loop.exec();
                emit messageLog(tr("Check API: network configuration info 
updated"));
        }
        QNetworkConfiguration defaultNetworkConfiguration = 
configurationManager.defaultConfiguration();
        if (defaultNetworkConfiguration.isValid()) {
                accessManager->setConfiguration(defaultNetworkConfiguration);
        }

        QString dataToEncode =  QString("a=%1&s=%2&p=%3&v=%4&d=%5")
                
.arg("update").arg(KEYDB_SERVER_API).arg(KEYDB_ACCESS).arg(APPVERSION_STR).arg(debug);
        QByteArray data = QUrl::toPercentEncoding(dataToEncode, "&=");

        QNetworkRequest request;
        request.setUrl(QUrl(KEYDB_SERVER));
        request.setRawHeader("Referer", QStringLiteral("Updater 
%1").arg(APPVERSION_STR).toLatin1());
        request.setRawHeader("User-Agent", QByteArrayLiteral("XXX"));
        request.setRawHeader("Content-Type", 
QByteArrayLiteral("application/x-www-form-urlencoded; charset=UTF-8"));

        m_netReply = accessManager->post(request, data);
        connect(m_netReply, SIGNAL(error(QNetworkReply::NetworkError)), 
SLOT(handleApiReplyError(QNetworkReply::NetworkError)));
        connect(m_netReply, SIGNAL(sslErrors(const QList<QSslError>&)), 
SLOT(handleSslErrors(const QList<QSslError>&)));
        connect(m_netReply, SIGNAL(finished()), SLOT(handleApiReplyFinished()));
        connect(m_netReply, SIGNAL(readyRead()), SLOT(handleApiReplyRead()));


Is there anything in this code that is wrong (or missing)? Is it possible to 
see more of the actual communication with the server, e.g. to compare the 
actual request headers (in case the server is rejecting Macs, for instance)?

Thanks,
René
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to