HTTPS-аутентификация с использованием QML и XMLHttpRequest

Я пытаюсь получить доступ к удаленной службе REST API с помощью QML. В соответствии с API службы я должен использовать HTTPS-запросы. Я не знаю, как интерпретировать вывод, который я получаю из кода.

методы.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();                                                                     
}                                                                                   

выход:

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

комментирование закомментированных строк не меняет вывод. Пытается ли вывод сказать мне, что я могу пройти аутентификацию только в том случае, если заполню форму входа? Я не нахожу в этом самой логики, потому что апи сервиса сделано для автоматического взаимодействия с устройствами.

ну, все, что связано с аутентификацией (Basic) в коде, который вы разместили, прокомментировано. Что вы ожидаете?

Olaf Kock 21.12.2020 02:06

Как уже упоминалось, я получаю тот же результат без комментирования этих строк. Возможно ли, что служба настроена неправильно? Возможен вход через браузер и форму, но не базовая авторизация через код.

Pj Toopmuch 21.12.2020 07:54

Используйте некоторые инструменты для проверки соединения, такие как Postman или что-то еще, а затем соответствующим образом исправьте свой код. Ошибка (401) однозначно указывает на то, что проблема в аутентификации. Кстати, сервер должен предоставить метод аутентификации. Прочитайте ответ на этот вопрос.

folibis 21.12.2020 09:24

Легко пропустил, извини @PjToopmuch. Однако то, как вы формулируете вопрос, должно быть наоборот: в настоящее время вы спрашиваете, почему аутентификация не работает, с кодом, который явно даже не обеспечивает ее. Я бы предложил перевернуть его. Неудивительно, что вы не можете аутентифицироваться без какой-либо аутентификации.

Olaf Kock 21.12.2020 11:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
305
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Было два недостатка. Сервис задокументировал неверный URL. Это было https://someurl.com/api вместо https://someurl.com/restapi, и служба действительно ожидает пользователя UTF-8: пароль для базовой аутентификации вместо пользователя: пароль в кодировке Base64. . Просто для полноты: Рабочий код:

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

Другие вопросы по теме