Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 22, 2012 17:43:41

Michael_Levin
От:
Зарегистрирован: 2010-10-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

Есть внутренний сервер по такому пути:
request = 'http://192.168.0.119:8066/api/nodes'

Я скачиваю из него дату:
urllib2.urlopen(request)

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

Значит я пытался использовать модуль ping ( http://stackoverflow.com/questions/316866/ping-a-site-in-python ), не понял как им воспользоваться в моем случае - он такой запрос не понимает. Еще пробовал NetServerGetInfo ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa370624(v=vs.85).aspx )
Он тоже не подходит.

Как правильно поступать?



Офлайн

#2 Авг. 22, 2012 17:48:50

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

Michael_Levin
как мне быстро понять,что сервер не доступен
ТАк и понять - ловить таймаут. Его можно сделать меньше.

Офлайн

#3 Авг. 22, 2012 18:01:25

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

Может это ?

>>> a=urllib.urlopen2('http://www.google.com/', timeout=1)
>>> a.getcode()
200
Если ответ другой то с сервером что то не так

Отредактировано Singularity (Авг. 22, 2012 19:55:13)

Офлайн

#4 Авг. 22, 2012 18:59:07

Michael_Levin
От:
Зарегистрирован: 2010-10-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

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

еще можно так:
http://snipplr.com/view/19639/

ping конечно поставил, он просто именно мой запрос не разобрал

спасибо!



Офлайн

#5 Авг. 22, 2012 20:16:08

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

Michael_Levin, попробуй выставить таймаут именно на процесс соединения.

Офлайн

#6 Авг. 23, 2012 15:36:41

Michael_Levin
От:
Зарегистрирован: 2010-10-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

odnochlen
Michael_Levin, попробуй выставить таймаут именно на процесс соединения.
имеется в виду это?
socket.create_connection(('192.168.0.119', 8066), 1)
socket.create_connection(('192.168.0.119', 8068), 1)

в первом случае (работающий адрес) - всё окей, во втором (не работающий) - socket.error: No connection could be made because the target machine actively refused it.

Я правильно понял? Ловить ошибку именно?



Офлайн

#7 Авг. 23, 2012 16:39:44

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

Вообще-то я имел в виду как-нибудь прописать это в http клиент, но так тоже можно - проверяем порт, если работает - запрашиваем файл.

Офлайн

#8 Авг. 23, 2012 16:45:40

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

как узнать, доступен ли сервер

def is_alive(address, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((address, port))
        return True
    except:
        return False



Офлайн

#9 Авг. 23, 2012 17:08:15

Michael_Levin
От:
Зарегистрирован: 2010-10-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

как узнать, доступен ли сервер

спасибо, ребят, так нормально!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version