2009-10-03 13 views
9

Stavo cercando di eseguire l'autenticazione di base per Twitter dalla mia app Qt. Io uso QNetworkAccessManager. Ma non ho trovato alcun aiuto su questo.Autenticazione di base con Qt (QNetworkAccessManager)

Ma ho trovato un programma chiamato qsoapmanager che passa le credenziali in base64 attraverso l'intestazione. Forse posso farlo con QNAM impostando l'intestazione in QNetowrkRequest. Ma non sono riuscito a trovare un modo.

Nella sorgente qsoapman, intestazione è impostato in questo modo:

QHttpRequestHeader header; 

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

posso fare proprio questo con QNAM/QNReq o c'è un modo migliore?

risposta

9

Il metodo consigliato è quello di connettersi al segnale authenticationRequired e impostare le credenziali da lì.

29

Ma se si vuole fare il programma semplicemente impostando il valore di intestazione, ecco come si può fare:

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

questo modo di fare si rivelerà utile in caso di servizi REST che utilizzano l'autenticazione di base: l'approccio qauthenticator dipende facendo un'escursione extra iniziale per server chiedere l'autenticazione, ma usandolo nel modo suddetto, questo viaggio può essere evitato. grazie per questa risposta – Viren

1

Usando solo qNetworkAccessManager normalmente ma aggiungere

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

alla vostra richiesta.

Esempio:

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

`

Problemi correlati