gnome-shell 拡張機能の一部として、xmlrpc を使用して Web サービスを使用しようとしています。Web サービスは基本認証ヘッダーを想定しています。Soup を使用して、次のコードを取得しました (基本的には、優れた openweather 拡張機能の設計図です)。
function load_json_async() {
if (_httpSession === undefined) {
_httpSession = new Soup.Session();
} else {
// abort previous requests.
_httpSession.abort();
}
let message = Soup.xmlrpc_message_new (
"https://api.sipgate.net/RPC2",
"samurai.BalanceGet",
new GLib.Variant('()',1.0)
)
_httpSession.connect('authenticate',
Lang.bind(
this,function(session,message, auth,retryFlag){
auth.authenticate("xxxxx","xxxxx");
}
)
)
_httpSession.queue_message(
message,
Lang.bind(this,
function(_httpSession, message) {
try {
if (!message.response_body.data) {
log("hello1 "+message.response_body.status)
return;
} else {
log("got message-status:"+message.status_code)
}
log(message.response_body.data)
} catch (e) {
log("exception:"+e)
return;
}
return;
}));
return;
}
接続を構築するためにスープを使用しています。認証シグナルは、キューコールバックが実行される前に実行されます。
それでも、コールバック内の最初の段階で、response_body は予期された承認ではなく、ステータス コード 401 を保持していました。指定された資格情報が正しくありません。これを修正した後、呼び出しは成功しました。ただし、この方法では常にプロバイダーへの 2 つの呼び出しが必要です。1 つ目は BasicAuth を使用する情報を取得するため、2 つ目は実際に呼び出しを行うためです。
最初の呼び出しで認証情報を直接提供する方法はありますか?