2009-10-03 4 views
9

Ich habe versucht, grundlegende Authentifizierung für Twitter von meiner Qt App aus durchzuführen. Ich benutze QNetworkAccessManager. Aber ich konnte dazu keine Hilfe finden.Standardauthentifizierung mit Qt (QNetworkAccessManager)

Aber ich fand ein Programm namens Qsoapmanager, die Anmeldeinformationen in base64 über den Header übergeben. Vielleicht kann ich dies mit QNAM tun, indem ich den Header in QNetowrkRequest setze. Aber ich habe keinen Weg gefunden.

In qsoapman Quelle, Header wie folgt festgelegt:

QHttpRequestHeader header; 

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

Kann ich mit QNAM/QNReq nur das tun oder es einen besseren Weg?

Antwort

9

Der empfohlene Weg besteht darin, eine Verbindung zum 10-Signal herzustellen und die Anmeldeinformationen von dort aus festzulegen.

29

Aber wenn man es nur durch die Einstellung der Header-Wert tun möchte, ist hier, wie Sie das tun können:

// 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

diese Art und Weise tut, dass auch bei REST-Service als nützlich erweisen, die grundlegende Authentifizierung verwenden: der qauthenticator Ansatz auf dem Tun eine zusätzliche Anfang Reise für Server hängt Fragen Sie nach Authentifizierung, aber in der oben genannten Weise, kann diese Reise vermieden werden. Danke für diese Antwort. – Viren

1

Gerade qNetworkAccessManager mit normalerweise aber

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

zu Ihrer Anfrage hinzuzufügen.

Beispiel:

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

`