1

我正在开发一个 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

在此先感谢您的帮助。

4

1 回答 1

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'));
    }));
}));

于 2016-09-03T18:22:06.183 回答