Twitter OAuth2的QnetWorkRequest返回禁止错误

QNetworkRequest for Twitter OAuth2 Returns Forbidden Error

本文关键字:禁止 错误 返回 QnetWorkRequest OAuth2 Twitter      更新时间:2023-10-16

我一直在尝试使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());

to:

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