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?

Foi útil?

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.

Exemplo:

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

`

scroll top