c++ - Twitter OAuth2 的 QNetworkRequest 返回禁止错误

标签 c++ qt twitter oauth qnetworkaccessmanager

我一直在努力使 Twitter API 的应用程序唯一身份验证在 Qt 上工作。当我运行我的代码时,出现此错误:

Failure "Error transferring https://api.twitter.com/oauth2/token - server replied: Forbidden"

这是我的请求代码:

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

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

    QNetworkRequest request;
    request.setUrl(url);
    QString authorizationKey =  m_consumerKey + ":" + m_consumerSecret;
    QByteArray encryptedAuth = authorizationKey.toUtf8().toBase64();
    request.setRawHeader("User-Agent", "My App v1.0.0");
    request.setRawHeader("Authorization", "Basic "+ encryptedAuth);
    request.setRawHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
    request.setSslConfiguration(QSslConfiguration::defaultConfiguration());

    QNetworkReply* reply = m_networkManager->post(request, QJsonDocument(params).toJson());

也许我错过了什么?

最佳答案

我能够解决这个问题。事实证明,我发送的请求正文格式错误。我改变了:

QJsonObject params;
params.insert("grant_type","client_credentials");
...
QNetworkReply* reply = m_networkManager->post(request, QJsonDocument(params).toJson());

到:

QUrlQuery payload;
payload.addQueryItem("grant_type","client_credentials");
QByteArray postData = payload.query(QUrl::FullyEncoded).toUtf8();
...
QNetworkReply* reply = m_networkManager->post(request, postData);

关于c++ - Twitter OAuth2 的 QNetworkRequest 返回禁止错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42800618/

相关文章:

c++ - C++如何为类成员函数分配内存?

c++ - 我的 SDL C++(2d 游戏)使用 opengl 很慢,怎么办?

c++ - 在 QJsonArray 中搜索项目

twitter - 谷歌地图 API

javascript - 推特分享按钮

php - 如何从 Twitter 消息 ID 'tag:search.twitter.com,2005:7550668919283712' 中删除此标签

c++ - C++中的Google Cloud Pubsub异步流API

c++ - 如何在可变参数模板类中获取函数指针的参数类型?

c++ - 如何在 Qt Creator 中静态构建非 Qt 项目

c++ - 有没有办法不杀死抛出 std::bad_alloc 的 Qt 应用程序?