Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Проверить доступность сайта (http://forums.kuban.ru/f1040/proverit-_dostupnost-_sajta-6487427.html)

Pilot1C 05.02.2015 20:46

Проверить доступность сайта
 
Есть интернет-ссылки (например http:\\82.34.2.1 или qwerty.asd.ru).
Как средствами 1С проверить доступна ли эта интернет-ссылка.
Задача в том, чтобы по таймеру проверять доступен ли сайт и в случае, если он "упадет" производить определенные действия.
Спасибо!

VZ 05.02.2015 22:53

Список "определенных действий" страшно интригует. Нельзя ли выложить?

smaharbA 05.02.2015 23:01

Так вроде как хттп запрос никто не отменял.

Uho 06.02.2015 10:27

HTTPОтвет (HTTPResponse)
КодСостояния (StatusCode)
Использование:

Только чтение.
Описание:

Тип: Число.
Код состояния (ответа) HTTP-сервера.
Подробности см. на: [url]http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html[/url].

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

Pilot1C 07.02.2015 07:12

Это надо сделать на 7.7.

xxi 07.02.2015 11:43

[code]
Function Ping(IPАдрес)
objShell = Новый COMОбъект("WScript.Shell") ;
objScriptExec = objShell.Exec("ping.exe -n 1 " + IPАдрес) ;
strPingResults = НРег(objScriptExec.StdOut.ReadAll());
Возврат Найти(strPingResults, "ttl=");
EndFunction
[/code]

Pilot1C 07.02.2015 13:52

Не подходит. Нужная страница сайта открывается в браузере, но не пингуется.

smaharbA 07.02.2015 14:05

Так и делай на 77
Так пойдет ? или нужно асинхронно ?

Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
УРЛ="http://www.yandex.ru/";
ХТТПЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт.AddObject("ХТТПЗапрос",ХТТПЗапрос);
Скрипт.Eval("ХТТПЗапрос.Option(2)=1251");
ХТТПЗапрос.Open("GET", УРЛ, 0);
ХТТПЗапрос.SetRequestHeader("Accept-Language", "ru");
ХТТПЗапрос.SetRequestHeader("Accept-Charset", "Windows-1251");
ХТТПЗапрос.SetRequestHeader("Content-Language", "ru");
ХТТПЗапрос.SetRequestHeader("Content-Charset", "Windows-1251");
ХТТПЗапрос.SetRequestHeader("Content-Encoding", "gzip, deflate");
ХТТПЗапрос.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=Windows-1251");
ХТТПЗапрос.SetRequestHeader("CACHE_CONTROL", "no-cache");
ХТТПЗапрос.SetRequestHeader("CONNECTION", "Keep-Alive");
ХТТПЗапрос.SetRequestHeader("USER_AGENT", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)");
ХТТПЗапрос.SetAutoLogonPolicy(0);
ХТТПЗапрос.SetProxy(0);
ХТТПЗапрос.Send();
к=_GetPerformanceCounter();
Пока ХТТПЗапрос.Status<>200 Цикл
Если _GetPerformanceCounter()-к>=2000 Тогда
Сообщить("Страница "+УРЛ+" неотвечает. Пипец!","!!!");
КонецЕсли;
Состояние("Ждем...");
КонецЦикла;

Pilot1C 07.02.2015 14:10

А что такое асинхронно :(

smaharbA 07.02.2015 14:13

Что бы адинес дальше работала, в то время как идет проверка.

smaharbA 07.02.2015 14:13

А как тут код вставлять чем нужно обрамить текст ?

Pilot1C 07.02.2015 14:19

Текст обрамил :)
Ввел адрес ссылки
а в ответ
ХТТПЗапрос.Send()
{Справочник.Объекты.Форма.Модуль(28)**: WinHttp.WinHttpRequest: The operation timed out

smaharbA 07.02.2015 14:22

5-xxi >
тогда уж просче

Шел = СоздатьОбъект("WScript.Shell") ;
Если Шел.Run("ping.exe -n 1 -w 100 " + IPАдрес,0,-1)<>0 Тогда
Сообщить("Фигня какая то");
КонецЕсли;

Pilot1C 07.02.2015 14:23

Писал выше. Страница не пингуется, но в интернет браузере открывается.
Через пинг не подходит.

smaharbA 07.02.2015 14:24

Ну и обрами "сенд" Попыткой Исключением, да и таймаут задается

Pilot1C 07.02.2015 14:26

пример страницы - пинг не проходит, но она работает
[url]http://www.dom-chehov.ru/online.asp?cam=1[/url]

Pilot1C 07.02.2015 14:27

А как задать тайм-аут? :(

smaharbA 07.02.2015 14:27

ХТТПЗапрос.SetTimeouts(1000,1000,1000,1000);

Pilot1C 07.02.2015 14:30

Не обижайся.
Не работал с ХТТП.
Куда это вставить? :))

smaharbA 07.02.2015 14:31

После создания объекта

smaharbA 07.02.2015 14:32

+ перед Опен

Pilot1C 07.02.2015 14:38

Ошибку обработал:
Попытка
ХТТПЗапрос.Send();
Исключение
Сообщить("ОШИБКА!");
Возврат 0;
КонецПопытки;

Pilot1C 07.02.2015 14:39

А что это проверяется?
Если _GetPerformanceCounter()-к>=2000 Тогда
Сообщить("Страница "+УРЛ+" неотвечает. Пипец!","!!!");
КонецЕсли;

smaharbA 07.02.2015 14:41

22-Pilot1C > Это если ресурс отвечает, а страничка не загружается (утрированно)

Pilot1C 07.02.2015 14:44

Спасибо!!!

Pilot1C 07.02.2015 14:47

Еще сбоит на
ХТТПЗапрос.Open("GET", УРЛ, 0);
{Справочник.Объекты.Форма.Модуль(16)**: WinHttp.WinHttpRequest: The URL is invalid
Обработаю Попытка-Исключение.
А как получить доступ к типу ошибки - The URL is invalid - чтобы ее вывести?

smaharbA 07.02.2015 14:51

...
Исключение
Сообщить(ОписаниеОшибки());
...

Pilot1C 07.02.2015 15:04

Спасибо!!!

Pilot1C 07.02.2015 15:37

А можно если страница требует авторизации передать через ХТТПЗапрос.SetRequestHeader
имя и пароль?

smaharbA 07.02.2015 15:43

Да, есть параметр
SetCredentials

если конечно это не авторизация в коде страницы, а серверная авторизация

smaharbA 07.02.2015 15:44

если в коде, то POST

xxi 07.02.2015 19:17

следующим шагом будет - определять видна ли картинка с камеры :)
[IMG]http://savepic.su/4928282.png[/IMG]

smaharbA 07.02.2015 19:19

31-xxi > Легко.

Pilot1C 08.02.2015 00:18

32-smaharbA > А как?

smaharbA 08.02.2015 00:40

33-Pilot1C > самое простое, сделать скрин и по нему маску, но это муторно (маску) немного и нужны допущения.
Да и не адинеснег я ), так иногда балуюсь.

smaharbA 08.02.2015 00:41

Вернее не то, что бы скрин (это крайний вариант), а "поймать" поток и из него кадр(ы).

Pilot1C 08.02.2015 00:45

Пока еще мучаюсь не могу с авторизацией разобраться.

smaharbA 08.02.2015 00:55

36-Pilot1C > авторизация какая ? Серверная - когда окошко с запросом логина и пароля выходит (не на страничке) - тогда SetCredentials(...).

Если на сайте типо поля ввода, то надо получить форму из страницы, поля логина и пароля (могут по разному именоваться), установить переменные в заголовке и выполнить хттп.Опен(ПОСТ, УРЛ, 0);

Pilot1C 08.02.2015 01:01

2-Й вариант.

smaharbA 08.02.2015 01:05

Тогда, если страница не меняется, в смысле не нужно большой универсальности, то задать переменные, типа

ХТТП.Open("POST", "http://...", -1);
ХТТП.Send("login=VfsaPupkin&password=SuperPuper");
...


Текущее время: 07:36. Часовой пояс GMT +3.