Обычная аутентификация с помощью Qt (QNetworkAccessManager) - PullRequest
11 голосов
/ 03 октября 2009

Я пытался выполнить базовую аутентификацию для Twitter из моего приложения Qt. Я использую QNetworkAccessManager. Но я не смог найти никакой помощи в этом.

Но я нашел программу под названием qsoapmanager, которая передает учетные данные в base64 через заголовок. Может быть, я могу сделать это с QNAM, установив заголовок в QNetowrkRequest. Но мне не удалось найти способ.

В источнике qsoapman заголовок установлен так:

QHttpRequestHeader header;

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

Могу ли я сделать это с QNAM / QNReq или есть лучший способ?

Ответы [ 3 ]

35 голосов
/ 09 ноября 2009

Но если вы хотите сделать это, просто установив значение заголовка, вот как вы можете это сделать:

// 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());
10 голосов
/ 03 октября 2009

Рекомендуется подключиться к сигналу authenticationRequired и установить оттуда учетные данные.

1 голос
/ 14 февраля 2017

Просто используйте qNetworkAccessManager, но добавьте

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

по вашему запросу.

Пример:

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

`

...