1

Gnome-shell extension에서 작업 중이며 Soup를 사용하여 서버에 접속하고 있습니다. 기본적으로 인증 후 수행 할 수있는 POST 요청을 보내려고합니다. 인증 된 경우 JSON 컨텐트가 응답하고 응답하지 않으면 응답 내용이 HTML 인 사이트의 시작 페이지입니다. 여기에 지금까지 내 코드입니다 :Soup - 인증을 통한 POST 요청

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) { 
 
\t global.log(response.status_code + ' - ' + response.reason_phrase); 
 
\t global.log(response.response_headers.get_one('content-type')); 
 
    })); 
 
}));

내가 응답에 따라 인증 요청이 잘 작동하는지 볼 수는 있지만, 두 번째 요청은 나에게 HTML 콘텐츠를 반환합니다. 이 두 가지 요청을 보내서 SoapUI를 체크인했는데 "HTTP 세션 유지 관리"옵션을 설정하면 제대로 작동합니다 (일부 JSON 콘텐츠가 있음).

따라서 두 번째 요청을 보낼 때 session에 인증이 저장되지 않는다고 생각합니다. 내 세션에서 인증을 저장하려면 여기에서 빠진 내용을 알고 있습니까?

나는 다른 방법은 다음 링크에서 몇 가지 팁을 사용하려고했으나 성공하지 : 당신의 도움에 미리 Consume a webservice with basic authentication using Soup

감사합니다.

답변

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) { 
 
\t global.log(response.status_code + ' - ' + response.reason_phrase); 
 
\t global.log(response.response_headers.get_one('content-type')); 
 
    })); 
 
}));