2009-10-03 19 views
9

Estaba intentando realizar una autenticación básica para Twitter desde mi aplicación Qt. Yo uso QNetworkAccessManager. Pero no pude encontrar ninguna ayuda en esto.Autenticación básica con Qt (QNetworkAccessManager)

Pero encontré un programa llamado qsoapmanager que pasa las credenciales en base64 a través del encabezado. Quizás pueda hacer esto con QNAM configurando el encabezado en QNetowrkRequest. Pero no pude encontrar una manera.

En la fuente de qsoapman, encabezado se establece así:

QHttpRequestHeader header; 

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

¿Puedo hacer eso con QNAM/QNReq o hay una mejor manera?

Respuesta

29

Pero si quieres hacerlo con sólo ajustar el valor de la cabecera, aquí es cómo se puede hacer eso:

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

esta manera de hacer que sea de utilidad en el caso de los servicios REST que utilizan la autenticación básica: el enfoque qauthenticator depende de hacer un viaje inicial adicional para el servidor de pida autenticación, pero usándola de la manera antes mencionada, se puede evitar este viaje. gracias por esta respuesta – Viren

1

Simplemente usando qNetworkAccessManager normalmente pero añadir

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

a su solicitud.

Ejemplo:

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

`

Cuestiones relacionadas