我一直在努力寻找一种方法将 twitter 集成到我的跨平台 qt 项目中。 我想要实现的目标并不奇怪。我只是希望能够使用 Twitter API 使用仅应用凭据获取带有特定主题标签的一些推文。 为此,我必须使用他们的 oauth2 身份验证过程获取不记名 token 。根据他们的开发页面,SSL 是必需的。 https://dev.twitter.com/oauth/application-only
我在 QT 中读到过,我可以使用 QNetworkAccessManager 发送 QNetworkRequests,但我似乎无法让它工作。我得到一个错误:“协议(protocol)\”\“未知”
我已经尝试准备了很多帖子,但我无法得到我想要的。我将不胜感激我能得到的所有帮助,使这成为可能。如果有人能指出我正确的方向/教程,请这样做:
附上我的示例代码:
.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 设置为请求。耶!最后我收到了回复。然而,我得到了这样的回复:
“传输错误 https://api.twitter.com/oauth2/token - 服务器回复:禁止访问”
最佳答案
如果您可以使用 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 (非本人测试,官方示例。)
关于c++ - 适用于 iOS 和 Android 的 QT C++ 中的 HTTPS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42779927/