我正在开发Gnome-shell扩展程序,而且我一直在使用Soup联系服务器。 基本上,我想发送一个POST请求,可以在身份验证后执行。如果经过身份验证,则响应是否为JSON内容,如果未经过身份验证,则响应内容为HTML,即站点的欢迎页面。 到目前为止,这是我的代码:
let session = new Soup.SessionSync();
session.user_agent = Me.metadata.uuid;
let authParams = {'login': 'xxx', 'password': 'xxx'};
let message = Soup.form_request_new_from_hash('POST', authURL, authParams);
session.queue_message(message, Lang.bind(this, function(session, response) {
global.log('AUTHENTICATE: ' + response.status_code + ' - ' + response.reason_phrase);
global.log('AUTHENTICATE: ' + response.response_body.data);
let msg = Soup.form_request_new_from_hash('POST', url, params);
session.queue_message(msg, Lang.bind(this, function(session, response) {
global.log(response.status_code + ' - ' + response.reason_phrase);
global.log(response.response_headers.get_one('content-type'));
}));
}));

根据响应,我可以看到身份验证请求运行良好,但第二个请求会返回HTML内容。 我通过发送这两个请求来检查SoapUI,当我设置选项"维护HTTP会话"时,它运行良好(我得到了一些JSON内容)。
因此,我认为我的session
在发送第二个请求时不会存储身份验证。你知道我在这里缺少什么,以便在我的会话中保存身份验证吗?
我尝试使用以下链接中的一些提示,但没有成功:Consume a webservice with basic authentication using Soup
提前感谢您的帮助。
答案 0 :(得分:0)
let session = new Soup.SessionSync();
session.user_agent = Me.metadata.uuid;
let authParams = {'login': 'xxx', 'password': 'xxx'};
let message = Soup.form_request_new_from_hash('POST', authURL, authParams);
session.queue_message(message, Lang.bind(this, function(session, response) {
global.log('AUTHENTICATE: ' + response.status_code + ' - ' + response.reason_phrase);
global.log('AUTHENTICATE: ' + response.response_body.data);
let msg = Soup.form_request_new_from_hash('POST', url, params);
session.queue_message(msg, Lang.bind(this, function(session, response) {
global.log(response.status_code + ' - ' + response.reason_phrase);
global.log(response.response_headers.get_one('content-type'));
}));
}));