Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверка загрузки html-странички через Python 
V
    Опции темы
pythonwin
  Дата 31.7.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Всем привет!

Можете помочь?

Возможно ли следующее?

есть страничка в интернете, которую нужно проверять периодически (загружается/не загружается, итак каждые полчаса). Если страничка не загружается, то нужно отправить сообщение на E-mail. Это реально сделать на питоне? 
PM WWW GTalk Jabber   Вверх
albertn
Дата 2.8.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Я не проверял, но по идее должно работать примерно так, если почтовый сервер находится на локальной машине. 
Если нет то полистай документацию
Код

import time,urllib,smtplib
from email.MIMEText import MIMEText
while True:
    try:
        urllib.urlopen('http://www.blabla.ru')
    except:
        msg = MIMEText("blablabla")
        msg['Subject'] = 'Server'
        you='[email protected]'
        me='[email protected]'
        msg['From'] = me
        msg['To'] = you
        s = smtplib.SMTP()
        s.connect()
        s.sendmail(me, [you], msg.as_string())
        s.close()
    time.sleep(60*30)

PM WWW ICQ   Вверх
pythonwin
Дата 2.8.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



albertn, спасибо за пример, но загвоздка в том как отличить работающию страничку от 
Цитата

ERROR
The requested URL could not be retrieved

While trying to retrieve the URL: http://lalala.ru:9999/

The following error was encountered:

    * Connection Failed

The system returned:

    (60) Operation timed out

The remote host or network may be down. Please try the request again.

Your cache administrator is [email protected].
Generated Wed, число  by лалала.ру (squid/2.5.STABLE11)


slav0nic, тоже дал пример:

Код

import urllib
import smtplib
fromaddr = "[email protected]"
toaddr = "[email protected]"
msg = "serv down! ahtung!"
try:
    url = urllib.urlopen("http://ya.ru")
except:
    smtp = smtplib.SMTP('smtp.ru')
    server.sendmail(fromaddr, toaddrs, msg)
    server.quit()


все работает, но как отличить работающую страничку от страничу с ошибками? мне пока не понятно.
PM WWW GTalk Jabber   Вверх
albertn
Дата 2.8.2006, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



я в принципе посмотрел, что функция 
Код
urllib.urlopen("http://ya.ru")
 сыпется при каких-либо ошибках
PM WWW ICQ   Вверх
albertn
Дата 2.8.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Вот новый пример:
Код

import time,httplib,smtplib
from email.MIMEText import MIMEText

def sendmail():
    msg = MIMEText("blablabla")
    msg['Subject'] = 'Server'
    you='[email protected]'
    me='[email protected]'
    msg['From'] = me
    msg['To'] = you
    s = smtplib.SMTP()
    s.connect()
    s.sendmail(me, [you], msg.as_string())
    s.close()


def run():
    while True:
        try:
            conn = httplib.HTTPConnection("www.python.org")
            conn.request("GET", "/index.html")
            r1 = conn.getresponse()
            if r1.status!=200:
                sendmail()
        except:
            sendmail()
        time.sleep(60*30)
        
run()


Это сообщение отредактировал(а) albertn - 2.8.2006, 10:43
PM WWW ICQ   Вверх
pythonwin
Дата 2.8.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



albertn, разбираюсь в твоем варианте, - пожалуйста, подскажи, где указывается smtp-сервер?

Добавлено @ 11:16 
albertn, ругается 
Цитата

Traceback (most recent call last):
  File "C:\test2\url_smtp_alien.py", line 33, in ?
    run()
  File "C:\test2\url_smtp_alien.py", line 29, in run
    sendmail()
  File "C:\test2\url_smtp_alien.py", line 11, in sendmail
    s.connect()
  File "C:\Python24\lib\smtplib.py", line 303, in connect
    raise socket.error, msg
socket.error: (10061, 'Connection refused')



на код:
Код

    msg = MIMEText("blablabla")
    msg['Subject'] = 'Server'
    you='[email protected]'
    me='[email protected]'
    msg['From'] = me
    msg['To'] = you
    s = smtplib.SMTP()
    s.connect()
    s.sendmail(me, [you], msg.as_string())
    s.close()

PM WWW GTalk Jabber   Вверх
albertn
Дата 2.8.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Это значит, что на локальной машине не стоит почтового сервера, через который ты хочешь отправить письмо.
Я же говорил, что для этого придется поковыряться в настройках SMTP сервера.
Привожу пример (у меня заработало):
Код

def sendmail():
    msg = MIMEText("blablabla")
    msg['Subject'] = 'Server'
    you='[email protected]'
    me='[email protected]'
    msg['From'] = me
    msg['To'] = you
    s = smtplib.SMTP('smtp.mail.ru')
    s.login('admin','passwd')
    s.sendmail(me, [you], msg.as_string())
    s.close()

Скорее всего тебе ничего не мешает отправлять сообщение самому себе
PM WWW ICQ   Вверх
pythonwin
Дата 2.8.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



с отправкой я рабобрался, но теперь проблема в том, когда ставишь "http://myweb.ru:8000" програ думает что страница с ошибкой:
Код

from email.MIMEText import MIMEText
def sendmail():
    msg = MIMEText(unicode(“Error”, 'utf-8'))
    msg['Subject'] = 'Error - page'
    you='[email protected]'
    me='[email protected]'
    msg['From'] = me
    msg['To'] = you
    server = smtplib.SMTP('192.168.0.1')
    server.set_debuglevel(1)
    server.sendmail(me, you, msg.as_string())
    server.quit()
    print "Error"
def run():
    while True:
        try:
            conn = httplib.HTTPConnection("http://myweb.ru:8000")
            conn.request("GET", "/index")
            r1 = conn.getresponse()
            print r1.status
            if r1.status!=200:
                sendmail()
            elif r1.status==200:
                print "Ok"
            else:
                print "Gluk"
        except:
            sendmail()
        time.sleep(60*30)
        
print "-"*100
run()



страницка http://myweb.ru:8000/index существует.
PM WWW GTalk Jabber   Вверх
albertn
Дата 2.8.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



а ты посмотри, что за статус ошибки,и желательно пример подобной страницы.
PM WWW ICQ   Вверх
pythonwin
Дата 2.8.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Вот код странички:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#">
<head><meta content="text/html; charset=UTF-8" http-equiv="content-type" py:replace="''"/>
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache"/>
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, no-store, must-revalidate, proxy-revalidate"/>
    <title>GDS</title>
<script LANGUAGE="JavaScript">
header("Cache-Control: no-cache, no-store, must-revalidate"); 
header("Pragma: no-cache"); 
window.clear(); 
</SCRIPT></head>
<body LINK="#0000FF" VLINK="#0000FF">Access Denied use <a href='/Login'>Login form</a></body></html>
<br/><br/>Build time: 0.002s, Page size: 0.71KB


conn.getresponse().status просмотреть не получается, т.к. срабатывает 
Код

except


Добавлено @ 12:31 
немного изменил код, ошибка не изчезла
Код

import time,httplib,smtplib
from email.MIMEText import MIMEText
def sendmail():
    msg = MIMEText(unicode(Error', 'utf-8'))
    msg['Subject'] = Error - page'
    you='[email protected]'
    me='[email protected]'
    msg['From'] = me
    msg['To'] = you
    server = smtplib.SMTP('192.168.0.1')
    server.set_debuglevel(1)
    server.sendmail(me, you, msg.as_string())
    server.quit()
    print "Error"
def run():
    while True:
        try:
            conn = httplib.HTTPConnection("http://www.myweb.ru", port="8000")
            conn.request("GET", "/index")
            r1 = conn.getresponse()
            if r1.status!=200:
                sendmail()
            elif r1.status==200:
                print "Ok"
            else:
                print "Gluk"
        except:
            sendmail()
        time.sleep(10)
        
print "-"*100
run()

PM WWW GTalk Jabber   Вверх
albertn
Дата 2.8.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Для начала мне бы надо потренироваться на "кроликах". А то мне содержимое страницы ни о чем не говорит.
И еще попробуй убрать try и покажи Traceback
PM WWW ICQ   Вверх
pythonwin
Дата 2.8.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Traceback (most recent call last):
  File "C:\test2\url_smtp_alien.py", line 39, in ?
    run()
  File "C:\test2\url_smtp_alien.py", line 22, in run
    conn.request("GET", "/index")
  File "C:\Python24\lib\httplib.py", line 801, in request
    self._send_request(method, url, body, headers)
  File "C:\Python24\lib\httplib.py", line 824, in _send_request
    self.endheaders()
  File "C:\Python24\lib\httplib.py", line 795, in endheaders
    self._send_output()
  File "C:\Python24\lib\httplib.py", line 676, in _send_output
    self.send(msg)
  File "C:\Python24\lib\httplib.py", line 643, in send
    self.connect()
  File "C:\Python24\lib\httplib.py", line 611, in connect
    socket.SOCK_STREAM):
socket.gaierror: (11001, 'getaddrinfo failed')


код:
Код

import time,httplib,smtplib
from email.MIMEText import MIMEText
def sendmail():
    msg = MIMEText(unicode(Error', 'utf-8'))
    msg['Subject'] = 'Error - page'
    you='[email protected] '
    me='[email protected]'
    msg['From'] = me
    msg['To'] = you
    server = smtplib.SMTP('192.168.0.1')
    server.set_debuglevel(1)
    server.sendmail(me, you, msg.as_string())
    server.quit()
    print "Error"
def run():
    while True:
        if 1==1:
            conn = httplib.HTTPConnection("www.myweb.ru", port="8000")
            conn.request("GET", "/index")
            r1 = conn.getresponse()
            print "|||   "+r1.status + "   |||"
            if r1.status!=200:
                sendmail()
            elif r1.status==200:
                print "Ok"
            else:
                print "Gluk"
        else:
            sendmail()
##        time.sleep(60*30)
        time.sleep(10)
        
print "-"*100
help(httplib.HTTPConnection)
print "-"*100
run()
print "-"*100


Это сообщение отредактировал(а) pythonwin - 2.8.2006, 12:49
PM WWW GTalk Jabber   Вверх
albertn
Дата 2.8.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Если ты пытался открыть страницу на сайте www.myweb.ru:8000, то ты слегка ошибся. На сколько я понял этот сайт внутрисетевой, и из вне он не открывается, а подхватывается он через какой-нить ДНС сервер. А как ты думаешь, питон знает о реальном месте расположения сервера? мож попробовать использовать вместо него IP?
PM WWW ICQ   Вверх
pythonwin
Дата 2.8.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Код

import time,httplib,smtplib
from email.MIMEText import MIMEText
def sendmail():
    msg = MIMEText(unicode('Error', 'utf-8'))
    msg['Subject'] = 'Error - page'
    you='[email protected]'
    me='[email protected]'
    msg['From'] = me
    msg['To'] = you
    server = smtplib.SMTP('192.168.0.1')
    server.set_debuglevel(1)
    server.sendmail(me, you, msg.as_string())
    server.quit()
    print "Error"
def run():
    while True:
        if 1==1:
            conn = httplib.HTTPConnection("200.130.130.90", port="8000") #Внешний IP-адрес
            conn.request("GET", "/index")
            r1 = conn.getresponse()
            print r1.status
            if r1.status!=200:
                sendmail()
            elif r1.status==200:
                print "Ok"
            else:
                print "Gluk"
        else:
            sendmail()
        time.sleep(60*30)
        
print "-"*100
run()



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

conn.getresponse().status==403

Что можно сделать?
PM WWW GTalk Jabber   Вверх
albertn
Дата 2.8.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



403 - стандартная ошибка доступа на защищенную паролем страницу.
Есть несколько вариантов в зависимости от того, что тебе надо
А действительно ли тебе нужна информация именно про эту страницу?
Не будет ли достаточным удостовериться, что страница запаролена, и возвращает ответ?
Ты действительно хочешь, чтобы программа вводила имя и пароль для данной страницы и на нее заходила? Не глупо ли это?

PS. Если не секрет, а зачем тебе это надо?
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.