python邮件中的HTT响应代码和状态代码

2024-04-25 08:05:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有自己的门户网站,它是用.ASP设计的。在这个门户中有多个选项卡。 为了监视每个页面及其加载时间(监视每个页面的慢度),我有以下代码。你知道吗

我在一个记事本中复制了所有的.asp页面,这个脚本将每个页面都提取到监视器中。 (希望httpauth工作) 当我试图发送电子邮件,如果状态码是200以外的时间超过0.5秒,它将拍摄邮件 但对于每个URL,它发送不同的邮件,而且它只在主题行中给出URL。 如何使我喜欢只发送一封邮件,包括所有错误与各自的网址。你知道吗

i.e.
https://example.org/node.asp - status 404
https://example.org/frame.asp - response time is 2 sec.
https://example.org/ticketgen.asp - response time is 5 sec.
https://example.org/alert.asp - status 500

下面是我的代码

#!/usr/bin/env python

import pickle, os, sys, logging
from httplib import HTTPConnection, socket
from smtplib import SMTP
from requests.auth import HTTPBasicAuth
import requests

def get_response_time(url):
    return requests.get(url, auth=HTTPBasicAuth('admin', 'secpasswd')).elapsed.total_seconds()

def email_alert(message, status):
    fromaddr = 'abc@mysite.com'
    toaddrs = 'xyz@mysite.com'

    server = SMTP('smtp.office365.com')
    server.starttls()
    server.login(fromaddr, 'mypasswd')
    server.sendmail(fromaddr, toaddrs, 'Subject: %s\r\n%s' % (status, message))
    server.quit()

def get_site_status(url):
    response = get_response(url)
   try:
        if response == 200:
            return 'up'
   except AttributeError:
        pass
    return 'down'

def get_response(url):
    '''Return response object from URL'''
    try:
        conn = requests.get(url, auth=HTTPBasicAuth('admin', 'secpasswd'))
        #conn.request('HEAD', '/')
        return conn.status_code
    except socket.error:
        return None
    except Exception as e:
        print(e)
        logging.error('Bad URL:{}'.format( url))
        exit(1)

def get_headers(url):
    '''Gets all headers from URL request and returns'''
    response = get_response(url)
    try:
        return getattr(response, 'getheaders')()
    except AttributeError:
        return 'Headers unavailable'

if __name__ == '__main__':
    content = []
    with open("/home/support/url_list.txt") as f:
        content = f.readlines()
    for url in content:
        url = url.strip()
        r_time = get_response_time(url)
        print(r_time)
        if r_time > 0.5 :
        #print("Please send email", url, "as Response Time is", r_time)
         email_alert(str(r_time), url)

    status = get_site_status(url)
    if status == "down":
        #print("Send email", url, "is", status, "and Response is", get_response(url))
        email_alert(str(get_site_status(url)), url)

Tags: fromimporturlgetreturnservertimeis
1条回答
网友
1楼 · 发布于 2024-04-25 08:05:42

与对每个url执行email_alert(str(r_time), url)不同,您可以在responses dict.中缓存每个url的响应时间,并在for url in content循环后创建电子邮件消息。i、 电子

res_times = {}
for url in content:
    url = url.strip()
    r_time = get_response_time(url)
    print(r_time)
    if r_time > 0.5 :
       res_times[url] = r_time

message = ''
#res_times not empty means you have to send error email
for x in res_times.items():
     message += "Url: %s, response time: %s\n" % x
if message:
    email_alert(message, 'error')

相关问题 更多 >