![](/img/trans.png)
[英]Facing Issue while using XMLHttpRequest with QML JavaScript
[英]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.