QNetworkReply https API 在 Android 设备上不起作用 - QT



我有一个问题,我正在用QT,Cross Platoform,iOS&制作一个应用程序。安卓。因此,当我调用此代码时:

QList<QString> JsonFunctions::getToken(QString Username, QString Password)
{
    QString lista;
    QEventLoop eventLoop;
    QNetworkAccessManager mgr;
    QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    QJsonObject json;
    json.insert("username", Username);
    json.insert("password", Password);
    json.insert("client_id","10");
    json.insert("client_secret","xxx");
    json.insert("scope","xxx");
    json.insert("grant_type","password");
    json.insert("accept", "application/json");
    QNetworkRequest request(QUrl("https://xxxxx/api/v2/login"));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    QSslConfiguration conf = request.sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);
    request.setSslConfiguration(conf);
    QNetworkReply *reply = mgr.post(request, QJsonDocument(json).toJson());
    eventLoop.exec();
    QString strReply = (QString)reply->readAll();
    qDebug() << "reply" << strReply;
    qDebug() << "code" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    QJsonDocument doc = QJsonDocument::fromJson(strReply.toUtf8());
    QJsonObject responseObject = doc.object();
    QString token_type = responseObject.value("token_type").toString();
    QString access_token = responseObject.value("access_token").toString();
    QString refresh_token = responseObject.value("refresh_token").toString();
    QList<QString> lists;
    lists.append(token_type);
    lists.append(access_token);
    lists.append(refresh_token);
    return lists;
}

问题在于,在Android上,此代码不起作用。而是在iOS上一切都起作用。Android上的答复是空的。

也许是因为HTTPS URL在Android Call上创建问题?我不明白如何修复它。我在设备上设置了许多许可,在清单中,设置了Internet权限。

现在,有很多想法可以工作吗?我正在测试Asus Zen Pad 3s和iPhone 7.仅在Android上不起作用。为什么 ?我使用QT 5.9

预先感谢。

  1. qnetworkAccessManager应用作异步API。当请求完成后(qnetworkreply *回复)信号会发出。连接到此信号并读取其中的数据。

  2. 如果您确实需要将其"同步"连接到Exit()exitloop的插槽的"同步"连接信号。还最好检查之前是否有任何SSL错误。

  3. 您将需要某些Android设备的OpenSSL libs。这给我带来了麻烦。需要Openssl/libcrypto.so和openssl/libssl。即使qsslsocket :: supportssl()返回true。

相关内容

  • 没有找到相关文章

最新更新