2009-10-03 26 views
9

私はQtアプリケーションからTwitter用の基本認証を実行しようとしていました。私はQNetworkAccessManagerを使用します。しかし、私はこれに関する助けを見つけることができませんでした。Qt(QNetworkAccessManager)による基本認証

しかし、私はqsoapmanagerという名前のプログラムを見つけました。このプログラムはヘッダーを通してbase64で資格情報を渡します。 QNetowrkRequestにヘッダを設定することで、QNAMでこれを行うことができます。しかし、私は方法を見つけることに失敗しました。

qsoapmanソースで

、ヘッダーは次のように設定されている:

QHttpRequestHeader header; 

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

は私がQNAM/QNReqまたはより良い方法があることだけで行うことができますか?

答えて

9

authenticationRequired信号に接続し、そこから資格情報を設定することをお勧めします。

29

しかし、あなただけのヘッダー値を設定することで、それを実行したい場合は、ここにあなたがそれを行うことができます方法は次のとおりです。

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

それを行うためのこの方法は、基本認証を使用してRESTサービスの場合に有用証明する:qauthenticatorアプローチはにサーバーのための余分な初期の旅をしているに依存します認証を要求しますが、前述の方法でそれを使用すると、この旅行は回避できます。この回答に感謝します。 – Viren

1

ただ、通常はなく、あなたの要求に

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

を追加qNetworkAccessManagerを使用。

例:

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

`