LINUX.ORG.RU

Проблемы автоматического скачивания файлов

 , , , ,


0

1

Привет. У меня, задача вроде бы элементарная, а что-то застопорился, может кто подскажет в каком направлении двигаться.

Скриптом на nodejs формирую массив url'ов для загрузки, дальше нужно их последовательно (не параллельно, чтобы не нагружать сервер) скачать, и если какой-то файл не скачается, то программа должна мне как-то сообщить, чтобы я мог потом докачать. для загрузки можно использовать любой инструмент, не обязательно js, поэтому я разместил тему здесь а в web-dev.

Я пробовал из nodejs вызывать wget, но он формирует много вывода, даже в случае успеха, мне не удалось отфильтровать сообщения об ошибках, плюс он качает почему-то не всё.

пробовал curl, разные готовые функции download для nodejs, но с ними что-то не то, они либо не качают, либо не генерируют ошибку в случае неудачи.

Может быть есть какое-то подходящее решение для моего случая?

вызывать wget, но он формирует много вывода, даже в случае успеха, мне не удалось отфильтровать сообщения об ошибках, плюс он качает почему-то не всё.

В man wget же написано,как его заткнуть.

Что касается ошибок загрузки, то тут два пути:

1. Вызывать по одному wget на файл и проверять код возврата.

2. Заставить wget докачивать до победного конца.

legolegs ★★★★★
()
Ответ на: комментарий от anonymous

Вот функция с той страницы на которую вы сослались. Многие запросы вернули 404 или 400 ошибку, при том что в браузере линки открываются нормально

const fs = require('fs');
const request = require('request');

module.exports.download = (url, dest, cb) => {
    const file = fs.createWriteStream(dest);
    const sendReq = request.get(url);

    // verify response code
    sendReq.on('response', (response) => {
        if (response.statusCode !== 200) {
            return cb({"url":url,"error":'Response status was ' + response.statusCode});
        }

        sendReq.pipe(file);
    });

    // close() is async, call cb after close completes
    file.on('finish', () => file.close(cb));

    // check for request errors
    sendReq.on('error', (err) => {
        fs.unlink(dest);
        return cb({"url":url,"error":err.message});
    });

    file.on('error', (err) => { // Handle errors
        fs.unlink(dest); // Delete the file async. (But we don't check the result)
        return cb({"url":url,"error":err.message});
    });
};

russian-turist-2019
() автор топика

то программа должна мне как-то сообщить, чтобы я мог потом докачать

Зачем, когда есть wget -t inf?

anonymous
()
Ответ на: комментарий от anonymous

То-есть если сервер не справиться с нагрузкой и упадёт, программа продолжит ддосить его? На мой взгляд, будет разумнее сохранить имена незагруженных файлов и попробовать загрузить их позже

russian-turist-2019
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.