wget захватывает пустые файлы, которые фактически существуют

У меня есть сценарий, предназначенный для загрузки определенного количества файлов с удаленного сервера. Это нужно делать только каждые 24 часа, поскольку они являются источниками JSON для базы данных на моем сервере. Файлы обновляются на удаленном сервере около полуночи GMT, а мой скрипт запускается через час после этого, чтобы убедиться, что они уже правильно обновлены.

Проблема в том, что я постоянно замечаю, что он не может загрузить по меньшей мере двадцать или более из 132 файлов, за исключением того, что он не считает, что это вообще не сработало (я вижу 200 OK). Это JSON, поэтому они имеют размер не более 8 КБ. В файле журнала wget я вижу следующее:

--2013-09-21 12:01:10-- http://services.runescape.com/m=itemdb_rs/api/graph/19227.json Reusing existing connection to services.runescape.com:80. HTTP request sent, awaiting response... 200 OK Length: 0 [text/html] Saving to: `./jsons/19227.json' 0K 0.00 =0s 2013-09-21 12:01:10 (0.00 B/s) - `./jsons/19227.json' saved [0/0] 

Это не имеет никакого смысла. Нет никаких рифм или причин неудач. Я перепробовал много раз и каждый раз, когда он писал произвольно 0-байтные файлы, каждый раз не прерываясь в тех же файлах. Удручающая часть – никаких ошибок в любом месте, поэтому ничто не попадает в журнал ошибок …

no-clobber в данном случае не имеет значения. Файлы должны быть перезаписаны, поскольку они устаревают каждые 24 часа, и даже «хорошие данные» за день до этого являются «плохими данными» сегодня.

Есть ли где-нибудь, что я мог бы улучшить свой скрипт, чтобы проверить размер файла или что-то еще перед загрузкой? Я попробовал на своем Mac дома и получил тот же точный результат, даже используя «режим паука», чтобы проверить, существует ли он в первую очередь. Самая неприятная часть заключается в том, что если я должен вставить URL-адрес в браузер, он загружает весь JSON так же, как и должен … Я считаю, что «повторы» не помогут, так как wget не работает в каких-либо HTTP-ошибках.

2 Solutions collect form web for “wget захватывает пустые файлы, которые фактически существуют”

Есть ли где-нибудь, что я мог бы улучшить свой скрипт, чтобы проверить размер файла или что-то еще перед загрузкой?

Прежде чем загрузка не будет иметь никакого смысла, потому что, очевидно, сервер не может правильно ответить на ваши запросы на загрузку. Он должен либо вернуть правильный файл, либо он должен вернуть код ошибки HTTP, но, по-видимому, он этого не делает. Вы можете попытаться определить размер удаленного файла с помощью HTTP HEAD запроса, но это не поможет вам, когда удаленный файл будет в порядке, но доставка GET все равно не удастся.

Вместо этого используйте цикл в вашем скрипте, чтобы просмотреть все файлы, которые вы хотите загрузить. Загрузите каждый файл с помощью одного запроса wget , а затем проверьте размер файла загруженного вами файла. Если это файл размером 0 байт, и вы уверены, что этого не должно быть, повторите запрос. Разумеется, вы должны добавить отказоустойчивый лимит, чтобы ваш скрипт не повторял запрос бесконечно, если он всегда терпит неудачу, а может быть и задержка (в случае, если на сервере ставка ограничена вашими запросами и не выполняется их намеренно).

Возможно, вы захотите попробовать включить отладочный переключатель wget -d чтобы узнать, что происходит.

пример

 $ wget -d http://services.runescape.com/m=itemdb_rs/api/graph/19227.json DEBUG output created by Wget 1.12 on linux-gnu. --2013-09-21 13:22:46-- http://services.runescape.com/m=itemdb_rs/api/graph/19227.json Resolving services.runescape.com... 216.115.77.143, 8.26.16.145, 62.67.0.145, ... Caching services.runescape.com => 216.115.77.143 8.26.16.145 62.67.0.145 64.94.237.145 Connecting to services.runescape.com|216.115.77.143|:80... connected. Created socket 3. Releasing 0x0000000000f251e0 (new refcount 1). ---request begin--- GET /m=itemdb_rs/api/graph/19227.json HTTP/1.0 Referer: http://www.google.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Host: services.runescape.com Connection: Keep-Alive Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 ---request end--- HTTP request sent, awaiting response... ---response begin--- HTTP/1.1 200 OK Date: Sat, 21-Sep-2013 17:22:47 GMT Server: JAGeX/3.1 Content-type: text/html; charset=ISO-8859-1 Content-Encoding: gzip Cache-control: no-cache Pragma: no-cache Expires: Thu, 01-Jan-1970 00:00:00 GMT Set-Cookie: settings=wwGlrZHF5gKN6D3mDdihco3oPeYN2KFybL9hUUFqOvk; version=1; path=/; domain=.runescape.com; Expires=Tue, 20-Sep-2016 17:22:47 GMT; Max-Age=94608000 Connection: Keep-alive Content-length: 1668 ---response end--- 200 OK cdm: 1 2 3 4 5 6 7 8 Stored cookie runescape.com -1 (ANY) / <permanent> <insecure> [expiry 2016-09-20 13:22:47] settings wwGlrZHF5gKN6D3mDdihco3oPeYN2KFybL9hUUFqOvk Registered socket 3 for persistent reuse. Length: 1668 (1.6K) [text/html] Saving to: “19227.json” 100%[==============================================================================================================================>] 1,668 --.-K/s in 0.08s 2013-09-21 13:22:47 (21.4 KB/s) - “19227.json” saved [1668/1668] 
  • Сценарий Bash, создающий нежелательные файлы
  • Использование wget для получения имен файлов из текстового файла
  • Как объединить опции '-i file' и '-O filename' из wget?
  • Могу ли я доверять статусу выхода wget, даже если он был перезапущен?
  • Проблема с рекурсивной загрузкой с помощью wget
  • Загрузите с помощью wget в другой каталог, чем текущий каталог
  • Как записать iso во время загрузки
  • Wget: конвертировать ссылки и избежать повторной загрузки уже загруженных файлов?
  • wget зависает ПОСЛЕ завершения загрузки, на exit_group
  • WGET - проверка подлинности root и всех дочерних папок
  • Загрузите несколько файлов с помощью wget параллельно
  • Interesting Posts

    Вопросы по использованию монтирования команд

    Как определить, является ли вывод команды или сценария оболочки стандартным или stderr

    Рекомендуемые приложения для брандмауэра для Linux?

    Добавить командную строку в USB unbind udev rule

    Проблема KVM и свопа

    как читать все настройки BIOS в программном обеспечении Linux

    Wget: ошибка сегментации (сбрасывание ядра)

    Имеет ли исходный сценарий bash неправильные значения для $ BASH_SOURCE?

    awk-манипуляция файлом fasta

    Как быстро скопировать схему разделов GPT с одного жесткого диска на другой?

    Прокрутка по выделенному файлу в сценарии bash

    Почему моя файловая система ext4 распознается только на машине, на которой она была отформатирована?

    Мост: удерживать обратный кадр за пределами высоты окна терминала

    Передача команды с аргументами скрипту

    Добавить отсутствующий файл после удаления всего файла старше 90 дней

    Linux и Unix - лучшая ОС в мире.