Soup - 具有身份验证的POST请求

时间:2016-09-02 23:19:25

标签: javascript authentication gnome-shell gnome-shell-extensions

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

提前感谢您的帮助。

1 个答案:

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