Не удалось получить содержимое вложений из Circuit с помощью XMLHttpRequest

У меня есть список URL-адресов вложений, и я хочу скачать его в один клик. Я загрузил URL-адреса в виде массива в JavaScript. Затем я использую XMLHttpRequest для получения содержимого файла. Тем не менее, кажется, что заголовок или аутентификация не верны при отправке в Circuitsandbox (а затем в Circuit для продуктивной работы), я всегда получаю сообщение об ошибке 401 или 404, даже если этот URL-адрес может быть загружен в браузере.

Итак, мой вопрос, какой заголовок / аутентификацию я должен использовать для моего запроса?

Это мой пример:

var auth = user + ':' + password; var hash = Base64.encode(auth); ... xhr.setRequestHeader("Authorization", "Basic " + hash );

Должен ли я использовать свой пользователь (адрес электронной почты) и пароль для Circuitsandbox здесь?

Большое спасибо за любой намек.

1 ответ

Решение

Api-файл Circuit для загрузки вложений не поддерживает базовую аутентификацию. Поскольку вы выполняете это в браузере, в котором уже есть сеанс, все, что вам нужно, это установить для xhr.withCredentials значение true. Это будет использовать куки вашего текущего сеанса. См. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

Я только что создал пример jsbin, который загружает вложения сообщения. Просто введите itemId сообщения. Элемент itemId можно увидеть, если щелкнуть правой кнопкой мыши отметку времени в сообщении на веб-клиенте Circuit.

https://output.jsbin.com/napenuy

client.getItemById(itemId.value) 
.then(item => {
  console.log('Attachments:', item.attachments);

  item.attachments.forEach(file => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', file.url, true);
    xhr.withCredentials = true; 
    xhr.onload = function(e) {
      if (this.status == 200) {
        result.innerHTML += `<br>${file.fileName}:<br>${this.responseText}`;  
      } 
    }
    xhr.send();    
  })
}) 
.catch(console.error);
Другие вопросы по тегам