Как я могу заставить эту онлайн-программу проверки сайта работать? - PullRequest
0 голосов
/ 02 января 2019

Я создаю средство проверки веб-сайта (сообщает, работает он или нет) с помощью CURL в Windows, но, похоже, оно не работает.

Я пытался создать простой скрипт в Windows. Сначала я проверяю Google с помощью curl и перенаправления вывода в файл statusgoogle.txt. Затем я прошу findstr найти предложение «Соединение установлено». Это означает, что сайт работает. Код ошибки 0 для findstr означает, что он нашел то, что искал. Таким образом, если он нашел то, что искал, я получаю сообщение «Сайт работает». Если он не найден, я получаю другой код ошибки, поэтому сообщение должно быть «сайт выключен».

Проблема в том, что: Я получаю оба сообщения. Я уже пытался использовать if% errorlevel%, но это тоже не сработало.

Кроме того, я хотел бы иметь код для нескольких веб-сайтов, потому что я создаю сценарий для bat, который фактически проверяет около 9 или 10 веб-сайтов одновременно.

curl -i http://www.google.com/ 1> statusgoogle.txt
findstr /c:"Connection established" statusgoogle.txt
if errorlevel 0 (GOTO :upwarning) else (GOTO :downwarning)
:upwarning
echo site up
:downwarning
echo site down

Если findstr находит строку «Соединение установлено», то я должен ожидать сообщение «site up». На самом деле это происходит так: в нем отображаются оба сообщения: «сайт вверх» и «сайт вниз».

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Одно из недоразумений классической команды if errorlevel 0,
, которое переводится в (см. Справку, если)

if errorlevel is 0 or greater

, что всегда верно для положительных уровней ошибок.

Либо

  • проверьте if errorlevel 1 и измените логику
    if errorlevel 1 (GOTO :downwarning) else (GOTO :upwarning)
  • проверьте текущее значение %errorlevel%
    if %errorlevel%==0 (GOTO :upwarning) else (GOTO :downwarning)
  • использовать условное выполнение при успехе / неудаче &&/||

curl -i http://www.google.com/ 1> statusgoogle.txt
findstr /c:"Connection established" statusgoogle.txt &&(GOTO :upwarning)||(GOTO :downwarning)

:upwarning
echo site up
goto :eof

:downwarning
echo site down
0 голосов
/ 02 января 2019

Если вы можете использовать PowerShell, это довольно просто.

try {
    Invoke-WebRequest "http://www.hp.com" | Out-Null
    "Web site is up"
} catch {
    "Web site is not up"
}
0 голосов
/ 02 января 2019

Проблема в том, что после того, как вы перейдете к «предупреждению», весь ваш код все равно будет выполнен.Вы должны завершить сценарий после «echo site up»:

curl -i http://www.google.com/ 1> statusgoogle.txt
findstr /c:"Connection established" statusgoogle.txt
if errorlevel 0 (GOTO :upwarning) else (GOTO :downwarning)
:upwarning
echo site up
goto :EOF
:downwarning
echo site down

:EOF означает «Конец файла».«exit / b» также будет работать.

...