2017-03-15 3 views
1

J'ai essayé de faire en sorte que l'authentification Application-only de l'API Twitter fonctionne sur Qt. Quand je lance mon code, je reçois cette erreur:QNetworkRequest pour Twitter OAuth2 renvoie une erreur interdite

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

Voici mon code de demande:

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()); 

Peut-être que je manque quelque chose?

+0

Cette offre précédemment? Je demande parce que la documentation de l'API de Twitter stipule spécifiquement que "les jetons reçus par cette méthode doivent être mis en cache.Si la tentative est trop fréquente, les demandes seront rejetées avec un code HTTP 403 avec le code 99." – MrEricSir

+0

Cela n'a jamais fonctionné. Dès le début, j'ai toujours eu cette erreur. Lorsque j'ai essayé de demander l'utilisation de XMLHttpRequest en javascript, j'ai reçu un jeton. Mais je veux que cela fonctionne sur C++ :( – cessmestreet

Répondre

1

J'ai réussi à résoudre le problème. Il s'est avéré que j'envoyais un mauvais format pour le corps de la demande. J'ai changé:

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);