Показать полную графическую версию : [решено] Проверка наличия файла на веб-сервере
Всем привет!
Имеется текстовый список ссылок на файлы (одна на строку), размещенные на различных HTTP серверах.
Все ссылки в формате http://site.domain/path/file.ext
Нужно проверить, живы ли ссылки, и записать все живые в отдельный текстовый файл в таком же формате.
Есть идея подключить к делу wget (http://gnuwin32.sourceforge.net/packages/wget.htm) для Windows (лучше брать setup простоты установки).
Одна ссылка:
wget --spider -nv http://tools.oszone.net/Vadikan/files/test.exe
Список ссылок из файла:
wget --spider -nv -i url_list.txt
Он проверяет нормально, но выводит в результаты текст, который придется фильтровать.
Ключ -nv отключает подробный вывод. Есть еще ключ -o file.txt для записи лога.
Возможно, есть другие пути. Буду признателен за любую реализацию!
Morpheus
19-05-2011, 14:38
Vadikan, мой скромный вариант (сильно прошу не бить!) :)
@echo off
del "c:\urls2.txt"
FOR /F "Tokens=*" %%a IN (c:\urls.txt) DO (
"путь_к\wget.exe" --wait=1 --timeout=3 --tries=2 --spider %%a > c:\temp.txt 2>&1
FOR /F "Tokens=*" %%b IN ('FindStr /I "200 OK" "c:\temp.txt"') DO (
echo %%a >> c:\urls2.txt
)
)
Читает c:\urls.txt и складывает живые в c:\urls2.txt.
Morpheus, спасибо, близко к цели :)
Проверил на
http://tools.oszone.net/Vadikan/files/test.exe
http://tools.oszone.net/Vadikan/files/test.vbs
http://tools.oszone.net/Vadikan/files/test.cmd
http://tools.oszone.net/Vadikan/files/test.bat
http://tools.oszone.net/Vadikan/files/test.mp3Первые два там есть. Получил
http://tools.oszone.net/Vadikan/files/test.exe
http://tools.oszone.net/Vadikan/files/test.exe
http://tools.oszone.net/Vadikan/files/test.exe
http://tools.oszone.net/Vadikan/files/test.vbs
http://tools.oszone.net/Vadikan/files/test.vbs
В принципе правильно ссылки нашлись, но нужно убирать дубликаты.
Может, с -nv будет проще? Меньше фильтровать. Ну и вместо первой команды FOR можно использовать -i urls.txt.
Все C:\ можно сразу убрать, все в одной папке лежит.
Morpheus
20-05-2011, 00:08
Vadikan, тогда так:
@echo off
del "c:\urls2.txt"
FOR /F "Tokens=*" %%a IN (c:\urls.txt) DO (
"путь_к\wget.exe" --wait=1 --spider %%a > c:\temp.txt 2>&1
FOR /F "Tokens=*" %%b IN ('FindStr /I /C:"200 OK" "c:\temp.txt"') DO (
echo %%a >> c:\urls2.txt
)
)
У меня твой список обработался нормально.
Morpheus, спасибо. Я поправил на "... 200 OK", т.к. было
--01:11:50-- http://tools.oszone.net/Vadikan/files/test.exe
=> `test.exe'
Resolving tools.oszone.net... 89.108.123.52
Connecting to tools.oszone.net|89.108.123.52|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 98,200 (96K) [application/octet-stream]
200 OK
Morpheus
20-05-2011, 01:22
Vadikan, ок, всё понятно. У меня локализованная версия, отсюда и разница видимо.
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
Включен режим робота. Проверка существования удалённого файла.
--2011-05-20 01:11:03-- http://tools.oszone.net/Vadikan/files/test.exe
Распознаётся tools.oszone.net... 89.108.123.52
Устанавливается соединение с tools.oszone.net|89.108.123.52|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: 98200 (96K) [application/octet-stream]
Удалённый файл существует.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.