Web-gui для wget (light)

    Ранее здесь находилось описание возможных ситуаций, когда данное решение могло бы вам понадобиться, но давайте его опустим. Возможность удобного создания удаленных закачек, которые выполняются привычным wget-ом (можно спокойно увидеть их список при помощи ps), с отображением прогресса — идея не новая. И даже есть некоторые решения, но не актуальные, так как более 5 лет никем не поддерживаются.

    Для торрентов всё просто и тривиально — ставим Transmission или любой аналогичный клиент с веб-мордой. Но для ссылок на простые файлы/страницы нужно что то своё. Вот короткий список задач, которые меня подтолкнули к написанию оного:
    • Смотрю фильм онлайн при помощи планшета, но появляются дела и надо бы его сохранить, чтоб досмотреть позже;
    • На удаленный сервер надо скачать файл, и приходится запускать терминал каждый раз;
    • Надо бы скачать образ свежего linuxmint, но на домашний NAS, а не ноутбук, работая за которым пришла эта идея;
    • Во время серфинга часто возникает задача сохранить файл и расшарить его.

    Если вам стало интересно — добро пожаловать под кат:



    Системные требования


    Веб-интерфейс построен на Javascript + css3 с клиентской стороны, и php (выбран как наиболее популярный) с серверной. Для полноценной работы потребуется:
    • *nix (по крайней мере писалось именно под эту платформу, для запуска под другой потребуются рабочие порты wget, ps и kill);
    • php5.x (скорее всего работать будет и на php4.x, по к моменту публикации это протестировано не было);
    • Браузер с поддержкой Javascript (и очень желательно — с поддержкой css3).


    Особенности и настройки серверной части


    Как уже было сказано выше — в роли серверной части выступает скрипт, написанный на php. Он выполняет следующие задачи:
    • Получение информации о запущенных задачах;
    • Отмена запущенных задач;
    • Добавление новых задач;
    • Возвращение результатов в JSON формате.

    Для своей работы ему требуются ps, wget и kill соответственно. Для получения значения состояния закачки (на сколько процентов завершена) используется следующий алгоритм:
    • Задачи wget запускаются с флагами "--background" и "--progress=bar:force";
    • Вывод лога загрузки производится в файл, установленный в параметре "--output-file=FILE";
    • При запросе состояния задач с помощью "ps -ax" получаем путь к файлу, установленный в "--output-file=FILE";
    • Читаем крайнюю строку этого файла, получая регуляркой из него искомое значение.

    Путь для временных лог-файлов устанавливается в строке "define('tmp_path', '/tmp');";

    Путь до директории, в которую будет происходить сохранение всех загружаемых файлов устанавливается в строке "define('download_path', BASEPATH.'/downloads');".

    Доступно удобное указание путей до ps, wget и kill. Для этого достаточно убрать комментарий вначале строки и указать свой путь, например: "define('wget', '/usr/bin/wget');".

    Возможна установка ограничения на скорость закачки из секции настроек. За это отвечает строка "define('wget_download_limit', '1024');". Если оставить её закомментированной — никакого ограничения не будет.

    Для определения в списке задачи запущенной через GUI от любой другой используется определенный флаг, уникальный для GUI. Он установлен в строке "define('wget_secret_flag', '--max-redirect=4321');" и его менять без необходимости не надо. Кстати, если хотите чтоб другие ваши задачи, запущенные из терминала отображались в веб-интерыейсе — достаточно как раз этот параметр к ним и добавить. Но не забывайте, что есть ещё и некоторые другие параметры, не менее обязательные (в зависимости от настроек).

    Постарался написать с максимально экономичным отношением к ресурсам и минимальной зависимостью от системы, но большим опытом в php не обладаю, поэтому — буду признателен рекомендациям по оптимизации.

    Скрипт отвечает как на POST, так и GET запросы. Разницы между ними нет. Так же отвечает на параметры, переданные в командной строке. Например: php ./rpc.php get_list или php ./rpc.php add_task http://goo.gl/5Qi0Xs.

    Пример POST-запроса и Json ответа:

    Request:
    192.168.1.2/wget/rpc.php?action=add_task&url=http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso
    Answer:
    {
        status: 1,
        msg: "Task added",
        id: 10910
    }

    Request:
    192.168.1.2/wget/rpc.php?action=get_list
    Answer:
    {
        status: 1,
        msg: "Active tasks list",
        tasks: [
            {
                url: "mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso",
                progress: 95,
                id: 10910
            }
        ]
    }

    Вывод «ps -ax | grep wget» и «cat /tmp/wget{RND}.log.tmp»:

    data:~# ps -ax | grep wget
    10910 ?        S<s    0:34 wget --progress=bar:force --background --tries=0 --no-cache --user-agent=Mozilla/5.0 (X11; Linux amd64; rv:21.0) Gecko/20100101 Firefox/21.0 --directory-prefix=/DataVolume/shares/Public/Downloads/ --limit-rate=2048k --output-file=/tmp/wget9720.log.tmp --max-redirect=4321 http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso
    11378 pts/0    S+     0:00 grep wget
     
    data:~# cat /tmp/wget9720.log.tmp
    --2014-08-24 12:32:04--  http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso
    Resolving mirror.yandex.ru... 213.180.204.183, 2a02:6b8::183
    Connecting to mirror.yandex.ru|213.180.204.183|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1286799360 (1.2G) [application/octet-stream]
    Saving to: `/DataVolume/shares/Public/Downloads/linuxmint-17-cinnamon-dvd-64bit.iso`
     
    95% [==================================>  ] 1,225,527,078 1.37M/s  eta 35s
    data:~#


    Особенности и настройки клиентской части


    Не используются «новые html5 теги», но используются свойства css3 для оформления прогресc-бара загрузок и адаптива. Дизайн выполнен в минималистичном стиле без изображений (исключением является favicon). При отсутствии задач в центре страницы располагается поле для добавления адреса закачки, если задачи имеются — это поле смещается вверх страницы, и ниже располагаются задачи.

    Все запросы — асинхронные (без перезагрузки страницы). Дизайн страницы — адаптивный:


    Изменение состояния отображается также в заголовке вкладки (окна):


    В нижней части страницы располагается javascript-закладка («Download this»), переместив которую в панель закладок браузера можно одним кликом добавлять новые задачи (при клике будет добавлена активная вкладка; если открыта вкладка с видеофайлом и будет нажата эта «закладка» на панели закладок — будет добавлена задача на скачивание этого видеофайла):


    Весь javascript код документа расположен в файле core.js. В верхней его части располагаются основные настройки:
    • «updateStatusInterval = 5 * 1000» — интервал обновления данных на открытой вкладке (будьте аккуратны с этим параметром на слабых серверах);
    • «DebugMode = false» — режим отладки, выводится отладочная информация в console.log;
    • «prc = 'rpc.php'» — путь до скрипта серверной части.

    Описывать функциональные моменты смысла особого не вижу, но скажу — функции разделены на логические группы, скрипт не минифицирован, комментарии имеют место быть.

    При нажатии на F5 происходит принудительное обновление задач, страница перезагружается только по нажатию на кнопку обновления в браузере.

    Установка


    • Скачать или склонировать крайнюю версию репозитория;
    • Распаковать в директорию, доступную «извне»;
    • Изменить путь "define('download_path', BASEPATH.'/downloads');" в «rpc.php»;
    • Открыть в браузере, проверить работоспособность. В случае возникновения ошибок — задайте вопрос.


    История изменений


    По мере изменений буду обновлять этот пост
    • Стало лень обновлять, вот ссылка на актуальный changelog
    • 0.0.9 — Добавлена возможность задания имени сохраняемого файла, путем добавления к URL в GUI строки вида "-> filename.ext" (полный вид запроса при этом будет «htttp://somehost.io/oldfilename.zip -> newfilename.zip»), добавлена дополнительная проверка входных данных
    • 0.0.8 — Добавлена проверка директории для временных файлов, добавлена возможность добавления нескольких задач в GUI, мелкие доработки (в основном в визуальной части)
    • 0.0.7 — В функцию тестирования добавлена проверка на существование и разрешение на запись в download_path (http://goo.gl/I8gYoK)
    • 0.0.6 — Вызов ps aux изменен на ps -ewwo pid,args для ускорения парсинга (issue #8)
    • 0.0.5 — Обновления безопасности, исправлено ошибочное сообщение об ошибке при добавлении задачи, функции возвращают не просто результат true|false — а плюс описание, добавлена поддержка работы с параметрами запуска из консоли (терминала), добавлена функция тестирования сервера (в gui — вместо url передать слово «test»), другие мелкие исправления
    • 0.0.4 — Добавлено автоматическое удаление лог-файлов wget-а, мелкие исправления
    • 0.0.3 — Релиз на гитхабе


    Чего стоит ждать:


    • Добавление авторизации и доступа по ключу;
    • Логирование (реализовано);
    • Автоматическая (или полуавтоматическая) очистка отработанных лог-файлов (реализовано частично);
    • Расширение для браузера (реализовано);
    • Детальные настройки для задач, такие как путь для загрузки и имя сохраняемого файла (реализовано частично);
    • Удаление не докачанных задач;
    • ...


    Лицензия MIT
    Copyright © 2014 Paramtamtam

    Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:

    Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.

    ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.


    Ссылка на проект: https://github.com/tarampampam/wget-gui-light
    Поделиться публикацией

    Похожие публикации

    Комментарии 50

      +1
      Неплохо. Взял посмотреть на стиль написания кода (в обучении главное — примеры).
      Вот только парсинг лог-файла — это настоящий linux-way-костыль.
      Погуглите в сторону DBus.
        +1
        DBus порождает зависимости… Но за напоминание и отзыв — спасибо!
          +2
          ладно, веб интерфейс к wget. я еще могу понять. но DBus к wget. аа!!!.. куда мир катится. :)
            0
            Если бы поменьше какой-то BUS был для реализации крос-процессного паттерна Observer/Observable, то было бы меньше шума?
        –21
        и php (выбран как наиболее популярный)

        что простите? откуда такая информация?
        А по сабжу, мне кажется задача довольно надуманная. Насколько реальна такая ситуация, и как часто это может пригодится…
          +4
          Извиняюсь что не совсем в тему, но тем кто ещё пользуется «чистым» wget, советую обратить свой взор на axel =)
            0
            Простите, но подача продукта у вашего Axel просто омерзительная.
            +18
            Зачем guy для wget? Яннп
              –1
              Поддерживаю.

              Вся суть wget именно в обилии консольных опций, поддержке различных протоколов и тем что можно им пользоваться без GUI абсолютно везде.
              Если в случае nmap с его GUI Zenmap плюшками являются преднастроенные наборы опций и это вроде как удобнее, то в данном случае подобный гуй урезает функциональность на столько что использование исходного продукта теряет всякий смысл. Тут либо делать преднастроенные паттерны, либо убирать wget как лишнюю зависимость =)

              Имхо, конечно.
                0
                Итак, есть интерфейс в случае консоли вам выдают комбайн, который умеет еще и по POP3 почту читать, а автор реализовал давно забытый всеми ReGet / FlashGet и много их там было. С одной стороны конечно молодец, а с другой и правда непонятно кто и зачем его использовать будет. Если речь шла о восстановлении после сбоев, то тут любой маломальский HTTPConnection класс такое умеет и в PHP, Python, Java. А если речь идет о каких-то улучшениях, то тоже непонятно ни тебе зеркалирования (поиска зеркал) как в Orbit. Смахивает на лабораторную работу студента изучившего PHP. Но всеравно парень молодец.
              –21
              Никогда раньше не слышал про лицензию MIT. Странно.
                –1
                Хотели спросить, зачем guy для wench или gui для wget?

                На самом деле, в 99.9% случаев не нужно. Но зато красиво, браузер покидать не надо, консоль запускать тоже необходимости нет.
                  –1
                  Можно же открыть в браузере и «сохранить как»?
                    +1
                    Можно, я и не спорю.
                    Но автор топика уже написал про «Возможность удобного создания удаленных закачек, которые выполняются привычным wget-ом (можно спокойно увидеть их список при помощи ps)
                    Да и, в ряде сценариев, когда надо ограничить гостевого пользователя, вариант вполне рабочий. Для гостя есть возможность скачать файл в строго обозначенные директории (на флешку, например), для администратора есть возможность контроля закачек. Подробно этот вопрос даже не собирался сейчас прорабатывать, это же не мой топик) Вполне допускаю, при развитии идеи, создание некоего киоска самообслуживания с оболочкой в виде браузера строго во весь экран, где клиент может зайти на ресурс, найти необходимые файлы, закачать себе на флешку и, возможно, распечатать некоторые материалы. Понимаю что сценарий притянут за уши. Но опять же, топик не мой.

                    PS Надо было изначально отвечать на первый комментарий автора комментария „Зачем guy для wget? Яннп“, а то он свой отредактировал, а теперь мой смотрится глупо.
                    +1
                    > Хотели спросить, зачем guy для wench или gui для wget?

                    Сколько лет уже можно обсуждать техническое задание? Ну хотелось мужику иметь WEB-интерфейс к загрузке файлов.
                    Если Вам не надо, так и проходите мимо. Знаете что на GitHUB более 15.1M репозиториев и я вам скажу многие Вам не нужны,
                    так что просто смиритесь с тем, что что-то вам не подходит(не нужно) и просто проходите мимо.

                    P.S. Меня конечно данная поделка заинтересовала на предмет «А как бы сделал я Web-интерфейс к ...?»
                    0
                    Она просто не настолько широко используется (хоть и часто) и меньше на слуху. Однако, это не мешает натыкаться на факт использования этой лицензии во множестве используемых, я уверен, и вами продуктах.
                    Лицензия MIT (опубликована, кстати, в 1988 году) во многом соответствует Лицензии BSD (Опубликована в 83-м), а полный текст шаблона лицензии выглядит так:

                    The MIT License (MIT)
                    Содержимое

                    The MIT License (MIT)

                    Copyright © [year] [copyright holders]

                    Permission is hereby granted, free of charge, to any person obtaining a copy
                    of this software and associated documentation files (the «Software»), to deal
                    in the Software without restriction, including without limitation the rights
                    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
                    copies of the Software, and to permit persons to whom the Software is
                    furnished to do so, subject to the following conditions:

                    The above copyright notice and this permission notice shall be included in
                    all copies or substantial portions of the Software.

                    THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
                    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
                    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
                    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
                    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
                    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
                    THE SOFTWARE.

                    0
                    Из описания не понятно какой нужен веб-сервер (или на него нет зависимости? =)). Когда то мне понадобилась веб обвертка для git, тогда я обошелся nginx + fcgiwrap + bash. Может и тут обойтись без php можно?
                      0
                      Возможно вы удивитесь, но в теории — на веб-сервер нет определенной зависимости, главное — чтоб он умел обрабатывать php и имел права на запуск exec().
                      Думал как обойтись без php, но при выборе яп две стороны — нужно обрабатывать post/get запросы и формировать json (удобно+распространено php/perl/py), и работать с системой (bash/perl). Старый добрый перл в моем понимании выигрывает, но в нем, увы, не силен
                        0
                        Насчет сервера довольно спорно, так как php5.4+ имеет встроенный веб сервер. И зависимости может действительно не быть.
                        +1
                        cgi + perl какой, вполне можно и без php…
                          0
                          Об этом было в частности написано в комментарии выше. Перл был бы пожалуй лучшим решением. Плюс на нем же можно сварганить свой веб-сервер в 80 строк :)
                            0
                            а можно код?
                              0
                              Source
                              #!/usr/bin/perl
                               
                              use strict;
                              use warnings;
                               
                              use LWP::Socket;
                              use FCGI::ProcManager qw/ pm_manage pm_pre_dispatch pm_post_dispatch /;
                               
                              # Prepare headers
                              my $headers = "HTTP/1.1 %d OK\r\n"
                                          . "Server: FakeServer/2009-09-12\r\n"
                                          . "Content-Type: text/html\r\n"
                                          . "Content-Length: %d\r\n"
                                          . "Connection: close\r\n\r\n";
                               
                              # Prepare and open socket
                              my $sock = new LWP::Socket();
                              die "Can't bind a socket" unless $sock->bind('127.0.0.1', '8080');
                              $sock->listen(10);
                               
                              # Create 5 childs
                              pm_manage(n_processes => 5);
                               
                              # Accepts a new connection
                              while ( my $socket = $sock->accept(10) ) {
                                  # Passing direction to child
                                  pm_pre_dispatch();
                                  # Default content
                                  my $content = "<html><body><h1>Hello from Habr</h1></body></html>";
                                  my $stat = 200;
                                  my $file_name;
                                  # Read from socket
                                  $socket->read( \$file_name );
                                  # Get wanted file name
                                  $file_name =~ s/GET \/([^ ]*) HTTP.+/$1/s;
                               
                                  if ( $file_name ) {
                                      if ( -f $file_name and open FILE, '<', $file_name ) {
                                          # Read from file
                                          $content = join "", <FILE>;
                                          close FILE;
                                      }
                                      else {
                                          $content = "File not found";
                                          $stat = 404;
                                      }
                                  }
                                  # Puts headers and content into the socket
                                  $socket->write( sprintf( $headers, $stat, length $content ) );
                                  $socket->write( $content );
                                  $socket->shutdown();
                               
                                  # Child's work complete
                                  pm_post_dispatch();
                              }
                               
                              # Close socket
                              $sock->shutdown();
                              

                              habrahabr.ru/post/69411/
                        +5
                        Насчёт вебсервера, есть очень простой обход его необходимости.
                        Добавьте в rpc.php возможность запускаться из-под xinetd.
                        Я для похожей задачи делал как-то так

                        service ws
                        {
                           port            = 8022
                           socket_type     = stream
                           wait            = no
                           type = UNLISTED
                           user            = root #внимание!, это надо поменять
                           server          = /usr/bin/php5
                           server_args = /root/ws.php
                           log_on_success  += USERID
                           log_on_failure  += USERID
                           disable         = no
                           #bind = 127.0.0.1
                        #       flags=REUSE
                        }
                        
                        

                        <?php
                        ob_start();
                        
                        echo "test";
                        
                        $r=ob_get_contents();
                        ob_end_clean();
                        resp($r);
                        
                        function resp($d){
                         $l=strlen($d);
                         echo "HTTP/1.1 200 OK\r\n";
                         echo "Content-Type: Content-Type: text/plain\r\n";
                         echo "Connnection: close\r\n";
                         echo "Content-length: {$l}\r\n";
                         echo "\r\n";
                         die($d);
                        }
                        

                        Тело запроса читается из stdin;
                        Это были суровые времена VDS с 32МБ памяти, мы экономили как могли.
                          +1
                          ух ты, спасибо за идею
                          +2
                          пока допиливаете свой гуй, можете попользовать PyLoad. Паузы, мультипоточность, докачка, ограничение скорости, плагины, загрузка с youtube. Годная качалка, работает и на raspberry pi, и на настоящих десктопах
                            +1
                            Что вам мешает выкинуть wget и скачивать файл на PHP?
                              0
                              Согласен. Или curl. Было бы эффективнее.
                              Плюс «1 скрипт для всего».
                                0
                                Потому как стоит задача не «написать качалку файлов на php», а создать web-интерфейс для готового решения.
                                Более того, постоянно висящий в памяти php на много прожорливее wget-а.
                                Более того, ты имеем полный контроль над задачами, и работам с ними как с простыми процессами.
                                  0
                                  Что PHP прожорливее wget, верю, только это проблема что ли? У вас так мало памяти? «Чистый» PHP даст вам куда больший контроль над задачами, чем wget, если wget зависнет или упадёт, как вы это узнаете?

                                  Кроме того, посмотрите на cURL multi exec — вот вам и решение проблемы с памятью.
                                0
                                Интересное решение, но не для web(internet). Т.к. выполнение ps, kill и даже wget — дырка размером с тоннель. Если полгода корпеть над selinux, acl и php-настройками то может быть и прокатило бы… но кому оно нужно?
                                Так что ИМХО, вы заменили UI-терминала на UI-браузера, больше ничего.
                                  +1
                                  www.rapidleech.com/
                                  Скачивает файлы по прямым ссылкам и с файлообменников, загружает их на файлообменники, сжимает, расжимает, отправляет по почте.
                                    0
                                    Всплакнул. Этому скрипту лет 10 точно есть. Пользовался еще в суровые времена ADSL, местных безлимитов и безлимитов на 64 кб/сек.
                                    Что кстати не мешает этому скрипту быть отличным. Но он не вебдванольный™
                                    0
                                    А почему нельзя просто поднять ssh на домашней тачке и через него стартовать wget?
                                      +3
                                      Еще кроме wget есть aria2… которая кроме http и ftp еще и торренты качает к примеру… и вроде даже какие-то готовые webgui к ней были…
                                        0
                                        было бы круто увидеть это в виде планюгина для owncloud…
                                          0
                                          *плагина 8)
                                          0
                                          Вместо ps можно попробовать pgrep.
                                            0
                                            Жесть-то какая!
                                            А что, не судьба по ssh на удаленный сервер зайти и wget -b запустить?

                                            Может у вас в загашнике и веб-морда для баша есть?
                                              0
                                              В веб-морде всяких FreeNAS-ов имеется пункт Shell, пару раз пользовался :)
                                                0
                                                Вообще это писал для домашнего NAS-а. И, нет, не гусарское это дело каждый раз заходить и ssh запускать
                                                  –1
                                                  А для кого alias'ы придуманы были? Элементарное нечто типа «wg » вызовет что-нибудь вроде «ssh someuser@somehost wgt », а скрипт wgt вызовет wget -b с записью куда-нибудь в директорию «all_shit_I've_download».

                                                  И не надо мне говорить о неосиляторстве ssh по ключам!
                                                0
                                                Тут намедни из ниоткуда возник проект Gooey — генератор графических интерфейсов к консольным приложениям (с автоматическим вытягиванием параметров и описаний из python). В принципе, идею веб-интерфейса можно обобщить не только на wget, но и на другие приложения.
                                                  0
                                                  А можно сделать конфиг-файл, чтобы не задействовались недоступные возможности?
                                                  Например, на embedded-системах вроде *wrt стоит busybox и wget реализована им. Но при этом набор параметров достаточно спартанский. Тот же прогрессбар, например, явно не регулируется (но при этом по дефолту все ж правильный).
                                                    0
                                                    Я вас не совсем понял… Не могли бы более четко выразить свои пожелания, и описать пункты, из-за которых вам не удается развернуть?
                                                      0
                                                      Возможности дефолтной реализации wget из busybox на *wrt невелики:

                                                      root@LibraryAP:~# wget --help
                                                      BusyBox v1.22.1 (2014-06-26 20:16:56 NOVT) multi-call binary.
                                                      
                                                      Usage: wget [-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document FILE]
                                                      	[--header 'header: value'] [-Y|--proxy on/off] [-P DIR]
                                                      	[-U|--user-agent AGENT] URL...
                                                      
                                                      Retrieve files via HTTP or FTP
                                                      
                                                      	-s	Spider mode - only check file existence
                                                      	-c	Continue retrieval of aborted transfer
                                                      	-q	Quiet
                                                      	-P DIR	Save to DIR (default .)
                                                      	-O FILE	Save to FILE ('-' for stdout)
                                                      	-U STR	Use STR for User-Agent header
                                                      	-Y	Use proxy ('on' or 'off')


                                                      Разные параметры вроде --progress-bar он не просто игнорирует, а выходит с ошибкой. Однако для успешной работы (т.е. чтобы уметь скачивать файлы) эти плюшки особо и не нужны.
                                                        0
                                                        Ох тыж ё… Я бы всё таки попробовал поставить не кастрированный wget и указать к нему путь в настройках, или как минимум подсунуть полноценный бинарник. Иначе — очень много придется переписывать.
                                                          0
                                                          Ну так-то да.
                                                          Только это уже будет не совсем «light»-вариант.
                                                    0
                                                    >веб сервер, пхп.
                                                    >лайт
                                                    лан
                                                      0
                                                      Я в своё время написал мульти-поточный менеджер закачек на php (curl), если интересно, могу скинуть сорцы.

                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                      Самое читаемое