16

I was trying to perform basic authentication for Twitter from my Qt app. I use QNetworkAccessManager. But I couldn't find any help on this.

But I found a program called qsoapmanager which passes credentials in base64 through the header. Maybe I can do this with QNAM by setting header in QNetowrkRequest. But I failed to find a way.

In qsoapman source, header is set like this:

QHttpRequestHeader header;

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

Can I do just that with QNAM/QNReq or is there a better way?

chanux
  • 1,829
  • 4
  • 16
  • 20

3 Answers3

45

But if you want to do it by just setting the header value, here's how you can do that:

// 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());
Riussi
  • 663
  • 1
  • 4
  • 6
  • 3
    this way of doing it will prove useful in case of REST services that use basic authentication: the qauthenticator approach depends on doing an extra initial trip for server to ask for authentication, but using it in the aforementioned way, this trip can be avoided. thanks for this answer. – Viren Feb 19 '11 at 05:09
11

The recommended way is to connect to the authenticationRequired signal and set the credentials from there.

kikeenrique
  • 2,589
  • 2
  • 25
  • 46
Lukáš Lalinský
  • 40,587
  • 6
  • 104
  • 126
4

Just using qNetworkAccessManager normally but add

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

to your request.

Example:

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

`

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
dqthe
  • 683
  • 5
  • 8