Можно ли подавить «пропускающее» поведение между попытками wget? - PullRequest
0 голосов
/ 23 июля 2011

Я использую wget для загрузки набора файлов по HTTP, используя один вызов wget на URL, в виде простого пакета cmd.exe.

Кроме того, я чередую зеркала в случайном порядке и хочу сохранить отдельное дерево для каждого зеркала, например:

http://server06//files/file1.txt  -> temp\server06\files\file1.txt
http://server03//files/file65.txt -> temp\server03\files\file65.txt

Что я делаю сейчас:

echo !url! | .\runners\wget.exe --tries=3 --force-directories --directory-prefix=.\temp\ --input-file=-

Иногда случается, что по какой-то причине сервер закрывает TCP-соединение. Я использую --tries=3, чтобы обойти это. В этом случае стандартное поведение wget состоит в том, что он пропускает уже загруженные байты и продолжает с этого момента что-то вроде этого:

2011-07-19 13:24:52 (68.1 KB/s) - Connection closed at byte 65396. Retrying.

--2011-07-19 13:24:54--  (try: 3) 
http://server06//files/filex.txt
Connecting to server|10.10.0.108|:80... failed: Unknown error.
Resolving server... 10.10.0.108
Connecting to server|10.10.0.108|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 166400 (163K), 101004 (99K) remaining [text/plain]
Saving to:
`./temp/server06/files/filex.txt'

        [ skipping 50K ]
    50K ,,,,,,,,,, ,,,....... .......... .......... .......... 61% 2.65M 0s
   100K .......... .......... .......... .......... .......... 92% 1.62M 0s
   150K .......... ..                                         100% 1.64M=0.06s

utime(./temp/server06/files/filex.txt):
Permission denied
2011-07-19 13:25:15 (1.72 MB/s) -
`./temp/server06/files/filex.txt'
saved [166400/166400]

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

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

Вопрос: возможно ли подавить это поведение? То есть сделать так, чтобы wget пробовал столько, сколько настроено параметром, при загрузке полного файла или нулевых байтов в каждой попытке?

Или я должен искать другой обходной путь?

1 Ответ

1 голос
/ 23 июля 2011

Я уверен, что вы будете счастливее с библиотекой libcurl .Это занимает всего один вызов на URL, а libcurl выполняет всю остальную работу.Кроме того, существует первоклассная поддержка пакета.

В конкретном случае у вас не возникнет проблем с использованием libcurl.

HTH

...