autenticação básica com Qt (QNetworkAccessManager)
-
19-09-2019 - |
Pergunta
Eu estava tentando realizar a autenticação básica para o Twitter do meu aplicativo Qt. Eu uso QNetworkAccessManager. Mas eu não poderia encontrar qualquer ajuda sobre isso.
Mas eu encontrei um programa chamado qsoapmanager que passa credenciais em base64 através do cabeçalho. Talvez eu possa fazer isso com QNAM através da criação de cabeçalho em QNetowrkRequest. Mas eu não conseguiu encontrar um caminho.
Em fonte qsoapman, cabeçalho é definido como este:
QHttpRequestHeader header;
header.setValue( "Authorization", QString( "Basic " ).append( auth.data() ) );
Posso fazer isso com QNAM / QNReq ou há uma maneira melhor?
Solução
A maneira recomendada é para se conectar à href="https://doc.qt.io/qt-4.8/qnetworkaccessmanager.html#authenticationRequired" rel="nofollow noreferrer"> authenticationRequired
sinal definir as credenciais de lá.
Outras dicas
Mas se você quiser fazê-lo por apenas definir o valor de cabeçalho, é aqui como você pode fazer isso:
// 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());
Apenas usando qNetworkAccessManager normalmente, mas adicionar
setRawHeader("Authorization", headerData.toLocal8Bit());
ao seu pedido.
//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);
`