Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет dibr ([info]dibr)
@ 2011-10-16 01:15:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
wget
     А существует аналог wget, но умеющий "не сдаваться" при получении от сервера ошибок, которые wget считает фатальными (400, 50x и подобными)? Или, может, можно wget научить быть чуток понастойчивее?
     --retry-connrefused - это не оно, при connection refused до кода ошибки дело вообще не доходит.

     UPD: найденные коллективным разумом решения:
      - юзать curl, он умеет
      - засунуть wget в цикл, и юзать ключ "-c" - лишние запросы будут, но лишних закачек не будет.


(Добавить комментарий)


[info]starcat13@lj
2011-10-15 18:21 (ссылка)
"не сдаваться" - пробовать снова и снова?

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2011-10-15 18:27 (ссылка)
Ну да. Просто надо тут скачать кусок сайта, который разнообразнейшим образом глючит - а wget при каждом чихе отказывается от повторных попыток. Запустить в цикле с --no-clobber тоже не сработало - если html уже есть, он его не качает, но и не разбирает на предмет ссылок (хотя в документации написано противоположное: html не скачивается, но считывается с диска и интерпретируется как если бы он был скачан).

(Ответить) (Уровень выше)


[info]bolk@lj
2011-10-15 18:55 (ссылка)
Попробуй curl:

--retry
If a transient error is returned when curl tries to perform a transfer, it will retry this number of times before giving up. Setting the number to 0 makes curl do no retries (which is the
default). Transient error means either: a timeout, an FTP 4xx response code or an HTTP 5xx response code.

When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be
the delay between the rest of the retries. By using --retry-delay you disable this exponential backoff algorithm. See also --retry-max-time to limit the total time allowed for retries.
(Added in 7.12.3)

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2011-10-16 05:12 (ссылка)
О! Спасибо, попробую :-)

(Ответить) (Уровень выше)

;)
[info]juunitaki@lj
2011-10-16 01:40 (ссылка)
while ! wget ...; do sleep 1; done

(Ответить) (Ветвь дискуссии)

Re: ;)
[info]dibr@lj
2011-10-16 05:16 (ссылка)
При -r (а у меня -r, на один файл нет большого смысла заводить wget) оно будет перескачивать файлы много раз. Это само по себе не страшно, но будет образовываться куча file.ext.1, .2, и так далее, что уже неудобно. А при --no-clobber оно (вопреки написанному в документации) не разбирает на предмет наличия ссылок уже скачанные файлы.
В-общем, раскопки продолжаются :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: ;)
[info]juunitaki@lj
2011-10-16 08:34 (ссылка)
-c не будет скачивать больше одного раза.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: ;)
[info]zhevak@lj
2011-10-16 08:50 (ссылка)
ага. И более того "-c" умеет подхватывать уже скаченный наполовину файл с того места, где произошел обрыв.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: ;)
[info]dibr@lj
2011-10-16 08:53 (ссылка)
Логично. Попробую :-)))

(Ответить) (Уровень выше)

Re: ;)
[info]dibr@lj
2011-10-16 08:52 (ссылка)
О, точно. Запрос будет (и фиг с ним), а повторного скачивания не будет.
Спасибо, попробую! :-)

(Ответить) (Уровень выше)


[info]vlkamov@lj
2011-10-17 02:55 (ссылка)
Второе решение супер.

(Ответить)