Как часть расширения gnome-shell, я пытаюсь использовать веб-сервис с помощью xmlrpc. Webservice ожидает базовый заголовок проверки подлинности. Используя суп, я получил следующий код (в основном план с большим расширением openweather):Используйте веб-сервис с базовой аутентификацией с использованием Soup
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 вместо ожидаемой авторизации. Приведенные учетные данные неверны. После исправления этого звонка прошло. Тем не менее, вам всегда нужны два вызова провайдера: сначала для получения информации, которую использует BasicAuth, а второй для фактического вызова.
Есть ли способ предоставить информацию аутентификации напрямую при первом вызове?