繁体   English   中英

HTTPS 使用 QML 和 XMLHttpRequest 进行身份验证

[英]HTTPS auth using QML and XMLHttpRequest

我尝试使用 QML 访问远程 REST API 服务。 根据服务 API 我必须使用 HTTPS 请求。 我不知道如何解释我从代码中得到的 output。

方法.js

function makeRequest()                                                              
{                                                                                   
var doc = new XMLHttpRequest();                                                 
                                                            
doc.onreadystatechange = function() {                                           
    if (doc.readyState == XMLHttpRequest.HEADERS_RECEIVED) {                    
        console.debug("Headers -->");                                           
        console.debug(doc.getAllResponseHeaders ());                            
        console.debug("Last modified -->");                                     
        console.debug(doc.getResponseHeader ("Last-Modified"));                 
        console.debug("error: " + doc.status);                                  
                                                                                
    }                                                                           
}                                                                               
                                                                                
doc.open("GET", "https://somedomain.com");                          
//var user="username"                                                             
//var pass="password"                                                             
doc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');      
//doc.setRequestHeader( 'Authorization', 'Basic ' + Qt.btoa( user + ':' + pass ) )
//doc.withCredentials = true;                                                     
doc.send();                                                                     
}                                                                                   

output:

Headers -->
date: Sun, 20 Dec 2020 16:04:25 GMT
server: Apache
cache-control: private
expires: Thu, 01 Jan 1970 01:00:00 CET
www-authenticate: FORM comment="Use form to authenticate"
content-length: 6529
x-powered-by: PleskLin
connection: close
content-type: text/html;charset=ISO-8859-1
Last modified -->
error: 401

注释掉注释行不会改变 output。 output 是否试图告诉我,只有填写登录表单才能获得身份验证? 我不觉得这很符合逻辑,因为该服务的 api 是为与设备自动交互而设计的。

有两个缺陷。 该服务记录了错误的 url。 It was https://someurl.com/api instead of https://someurl.com/restapi and the service does expect a UTF-8 user:password for Basic Auth instead of Base64 encoded user:password. 只是为了完整性:工作代码:

function makeRequest()
{
var fetch={};
fetch["some"]="requestcontent";
var postData = JSON.stringify(fetch);
var doc = new XMLHttpRequest();
doc.onreadystatechange = function() {
    if (doc.readyState == doc.DONE) {
        console.debug("Headers -->");
        console.debug(doc.getAllResponseHeaders ());
        console.debug("Last modified -->");
        console.debug(doc.getResponseHeader ("Last-Modified"));
        console.debug("code: " + doc.status);
        var serverResponse = doc.responseText;
        var result = JSON.parse(serverResponse);
    }
}
doc.open("POST", "https://someurl.com/api");
var user="username"
var pass="password"
doc.setRequestHeader('Content-type', 'application/json');
doc.setRequestHeader( 'Authorization', 'Basic ' + user+':'+pass);
doc.withCredentials = true;
doc.send(postData);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM