适用于iOS和QT的QT C ++中的HTTPS请求的Android

时间:2017-03-14 07:21:07

标签: c++ ios qt ssl twitter

我一直在努力寻找一种方法将twitter集成到我的跨平台qt项目中。 我想要实现的并不是什么花哨的东西。我只是希望能够使用Twitter API使用仅应用凭据来获取带有特定主题标签的推文。 为了做到这一点,我必须使用他们的oauth2身份验证过程获得持有者令牌。根据他们的开发页面,SSL是必需的。 https://dev.twitter.com/oauth/application-only

我已经读过,在QT中,我可以使用QNetworkAccessManager发送QNetworkRequests,但我似乎无法使其工作。我收到一个错误:“协议\”\“未知”

我已经尝试过很多帖子,但我无法得到我想要的东西。我将非常感谢能够使这一切成为可能的所有帮助。如果有人能指出我正确的方向/教程,请这样做:

附件是我的示例代码:

的.pro

QT += qml quick network

设置代码:

m_networkManager = new QNetworkAccessManager(this);
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));

请求代码:

QJsonObject params;
params.insert("grant_type","client_credentials");

QUrl url("https://api.twitter.com/oauth2/token");
url.setHost("api.twitter.com");

QNetworkRequest request;
QString authorizationKey =  m_consumerKey + ":" + m_consumerSecret;
request.setRawHeader("Authorization", "Basic "+ authorizationKey.toUtf8().toBase64());
request.setRawHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
m_networkManager->post(request, QJsonDocument(params).toJson());

最后我的回调:

void NetworkClass::requestFinished(QNetworkReply *reply)
{
    cout << "header size: " + reply->readBufferSize();
    if (reply->error() == QNetworkReply::NoError) {
        //success
        QByteArray response_data = reply->readAll();
        QJsonDocument json = QJsonDocument::fromJson(response_data);
        cout <<"result: " << response_data.toStdString();
    }
    else {
        //failure
        qDebug() << "Failure" <<reply->errorString();
    }
    reply->deleteLater();
}

注意:我对SSL等不太了解。我还是个新人。也许这就是为什么我现在感到如​​此失落。请帮帮我。感谢。

更新
@dutt指出我忘记将url设置为请求。 Yey!最后我收到了回复。但是,我收到了这个回复:
“传输https://api.twitter.com/oauth2/token时出错 - 服务器回复:禁止”

1 个答案:

答案 0 :(得分:-1)

如果您可以使用Qt 5.8,则下一步可能会有所帮助:http://blog.qt.io/blog/2017/01/25/connecting-qt-application-google-services-using-oauth-2-0/和示例https://github.com/qt/qtnetworkauth/tree/5.8/examples/oauth/twittertimeline (未经我测试,但是官方的例子。)