Войти

Показать полную графическую версию : curl в цикл


mxm199
23-07-2019, 13:12
День добрый, помогите сделать скриптик проверки доступности локального ресурса, у самого какая-то ерунда получается
Имеется такая команда
curl -Is http://127.0.0.1:8081/digsign
после загрузки компьютера этот адрес отвечает минут через 5-10

HTTP/1.1 200 OK
Date: Tue, 23 Jul 2019 09:36:46 GMT
Access-control-allow-origin: *


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

Спасибо!

Iska
23-07-2019, 18:12
mxm199, что такое «-Is»? Что значит «отвечает минут через 5-10»?

mxm199
23-07-2019, 18:14
Вот наклепал такое чудо

@Echo Off

:begin

curl -Is http://127.0.0.1:8081/digsign
if errorlevel 1 (
goto begin
) else (
Msg * "Работает"
)

:stop
В принципе работает, но вопрос, как можно ограничить количество попыток, допустим 10 и установить паузу между запросами?

Цитата Iska:
Что значит «отвечает минут через 5-10» »
В принципе это не важно, но за это время поднимается локальный сервер, может и не подняться


«-Is» »


получить информацию заголовка HTTP

Patroklos
23-07-2019, 19:24
установить паузу между запросами? »
Пауза в 60 секунд:
timeout /t 60 /nobreak

Я бы посоветовал обратить внимание на утилиту HTTPing.
https://www.vanheusden.com/httping/
httping --url http://127.0.0.1 --port 8081 --count 10 --interval 60

mxm199
24-07-2019, 09:25
HTTPing »
Да, спасибо, но немного не то, там свои нюансы, мне нужно проверить, что именно страничка открывается, curl для этого очень подходит.
timeout, забыл я про него, только вечером вспомнил)))

Всё же интересно как ограничить количество циклов? Может что-то с этой конструкцией

while
...
end while

но как прикрутить не понятно

Или можно как-то прицепиться к errorlevel, то есть если количество полученных errorlevel=1 достигло 10, то goto :eof ?

mxm199
24-07-2019, 10:03
так напридумывал

set /a x=0

if errorlevel 1 (
set /a x+=1
if %x% == 5 goto stop


не знаю на сколько корректно, но вроде работает

megaloman
24-07-2019, 14:23
mxm199, Не проверял, нету Вашей утилиты, если она выдаёт ErrorLevel, то @Echo Off
cls
Set /A tPause=60
Set /A nTry=10

FOR /L %%i IN (1,1,%nTry%) DO (
curl -Is http://127.0.0.1:8081/digsign && (Echo +++ Соединение установлено &GoTo :Continue)
TIMEOUT /T %tPause% /NOBREAK
)
Echo !!! Соединение не установлено
:Continue
Pause
Exit /B

Busla
24-07-2019, 17:40
megaloman, curl не "Ваша", а штатная в современных Windows

Iska
24-07-2019, 22:01
Busla, и у неё реально самопальные параметры, отсутствующие в оригинальной версии?

По факту, там надо не только errorlevel смотреть, но и разбирать содержимое ответа при errorlevel = 0. Мне так кажется.

Busla
25-07-2019, 00:06
Iska, каким местом они самопальные? Ровно те же, что и в современных дистрибутивах Linux:
-I, --head Show document info only
-s, --silent Silent mode
там надо не только errorlevel смотреть, но и разбирать содержимое ответа при errorlevel = 0 »
IMHO топикстартеру скорее всего хватило бы и факта, что порт слушается

Iska
25-07-2019, 13:46
Busla, я не знал, что их можно произвольно комбинировать.

IMHO топикстартеру скорее всего хватило бы и факта, что порт слушается »
Возможно.

Busla
25-07-2019, 15:38
я не знал, что их можно произвольно комбинировать »
добро пожаловать в Unix (https://developer.ibm.com/tutorials/l-bash-parameters/#options-and-getopts)

Iska
25-07-2019, 19:46
добро пожаловать в Unix »
— Ну, будете у нас на Колыме…
—…
— Будете у нас на Колыме — милости просим.
— Нет, уж лучше Вы к нам. (https://www.youtube.com/watch?v=1sKMkxvv_fw)
:lol:.

А если серьёзно, то ОС тут не при чём: возможности разбора командной строки приложением зависят только от него самого.

Busla
25-07-2019, 19:58
А если серьёзно, то ОС тут не при чём »
Если серьёзно, то в каждой системе есть свои соглашения и сложившаяся практика. И вменяемые разработчики приложений им следуют, а невменяемые "зависят только от него самого"

Iska
25-07-2019, 20:38
И вменяемые разработчики приложений им следуют, »
Это да.

DJ Mogarych
31-07-2019, 22:17
Powershell:
$status = curl ya.ru |select -expand statusdescription
if ($status -eq 'ok') {write-host -fore green "Полный вперёд!"}
else {write-host -fore red "Полундра!"}
В Powershell curl - это алиас к команде Invoke-WebRequest.

Busla
01-08-2019, 11:22
В Powershell curl - это алиас к команде Invoke-WebRequest. »
так и напишите сразу Invoke-WebRequest
алиасы не для скриптов, а для упрощения интерактивного использования




© OSzone.net 2001-2012