2009-10-03 19 views
9

Próbowałem wykonać podstawowe uwierzytelnienie dla Twittera z mojej aplikacji Qt. Używam QNetworkAccessManager. Ale nie mogłem znaleźć żadnej pomocy w tej sprawie.Podstawowe uwierzytelnianie za pomocą Qt (QNetworkAccessManager)

Ale znalazłem program o nazwie qsoapmanager, który przekazuje referencje w base64 przez nagłówek. Może mogę to zrobić z QNAM przez ustawienie nagłówka w QNetowrkRequest. Ale nie udało mi się znaleźć sposobu.

W qsoapman źródła, nagłówek jest ustawiony tak:

QHttpRequestHeader header; 

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

mogę zrobić tylko, że z QNAM/QNReq czy jest jakiś lepszy sposób?

Odpowiedz

29

Ale jeśli chcesz to zrobić tylko przez ustawienie wartości nagłówka, oto jak można to zrobić:

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

ten sposób robi to okaże się przydatne w przypadku usług REST, które korzystają z uwierzytelniania podstawowego: Podejście qauthenticator zależy od prowadzenia dodatkowego początkowego wycieczkę dla serwera do prosić o uwierzytelnienie, ale używając go w wyżej wymieniony sposób, można uniknąć tej podróży. dzięki za tę odpowiedź. – Viren

1

Wystarczy za pomocą qNetworkAccessManager normalnie, ale dodać

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

żądaniem.

Przykład:

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

`

Powiązane problemy