2009-10-03 8 views
9

J'essayais d'effectuer une authentification de base pour Twitter à partir de mon application Qt. J'utilise QNetworkAccessManager. Mais je n'ai trouvé aucune aide à ce sujet.Authentification de base avec Qt (QNetworkAccessManager)

Mais j'ai trouvé un programme appelé qsoapmanager qui transmet les informations d'identification dans base64 via l'en-tête. Peut-être que je peux le faire avec QNAM en définissant l'en-tête dans QNetowrkRequest. Mais j'ai échoué à trouver un moyen.

En source qsoapman, en-tête est défini comme ceci:

QHttpRequestHeader header; 

header.setValue("Authorization", QString("Basic ").append(auth.data())); 

Puis-je faire cela avec QNAM/QNReq ou est-il une meilleure façon?

Répondre

9

La méthode recommandée consiste à se connecter au signal authenticationRequired et à définir les informations d'identification à partir de là.

29

Mais si vous voulez le faire en réglant simplement la valeur d'en-tête, voici comment vous pouvez le faire:

// HTTP Basic authentication header value: base64(username:password) 
QString concatenated = username + ":" + password; 
QByteArray data = concatenated.toLocal8Bit().toBase64(); 
QString headerData = "Basic " + data; 
request.setRawHeader("Authorization", headerData.toLocal8Bit()); 
+0

cette façon de faire se révélera utile dans le cas des services REST qui utilisent l'authentification de base: l'approche qauthenticator dépend de faire un premier voyage supplémentaire pour serveur demander l'authentification, mais en l'utilisant de la manière mentionnée ci-dessus, ce voyage peut être évité. merci pour cette réponse. – Viren

1

Juste en utilisant QNetworkAccessManager normalement, mais ajouter

setRawHeader("Authorization", headerData.toLocal8Bit()); 

à votre demande.

Exemple:

//authentication 

QString concatenated = "admin:admin"; //username:password 

QByteArray data = concatenated.toLocal8Bit().toBase64(); 

QString headerData = "Basic " + data; 

QNetworkRequest request=QNetworkRequest(QUrl("http://192.168.1.10/getinfo")); 

request.setRawHeader("Authorization", headerData.toLocal8Bit()); 

networkAccessManager->get(request); 

`

Questions connexes