使用Qt(QNetworkAccessManager)进行基本身份验证

16

我正在尝试从我的Qt应用程序对Twitter执行基本身份验证。我使用QNetworkAccessManager。但是我没有找到任何有关此的帮助。

但是我发现了一个名为qsoapmanager的程序,它通过标头传递base64凭据。也许我可以通过在QNetowrkRequest中设置标头来使用QNAM完成这项工作。但是我未能找到方法。

在qsoapman源代码中,标头设置如下:

QHttpRequestHeader header;

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

我可以只用QNAM/QNReq来实现这个功能吗?还是有更好的方法?

3个回答

45

但是,如果你只想通过设置头部值来实现,以下是如何做到这一点:

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

3
在使用基本身份验证的REST服务时,这种方法会很有用:qauthenticator方法需要进行额外的初次请求以进行身份验证,但是如果按照上述方式使用它,则可以避免这一次请求。感谢您的答案。 - Viren

11

4
只需正常使用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);

`


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接