Seite 1 von 1
http error
Verfasst: Montag 15. Oktober 2012, 11:25
von jurgen
Hallo,
Ich habe ein kleines Programm geschrieben was eine Webseite ausliest:
Code: Alles auswählen
import urllib
import urllib2
import base64
import smtplib
import os
url = "http://website.du"
authKey = base64.b64encode("user:pass")
headers = {"Content-Type":"application/json", "Authorization":"Basic " + authKey}
data = {"param":"value"}
request = urllib2.Request(url)
for key,value in headers.items():
request.add_header(key,value)
response = urllib2.urlopen(request)
Heute morgen bekam ich diese Fehlermeldung:
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 503
Eben lief das Programm wieder ohne Probleme. Hab auf anderen Foren diesen oder ähnliche Lösungsansätze gefunden, produziert aber bei mir immer Syntax error in Zeile 2....
Code: Alles auswählen
contents = resp.read()
except urllib2.HTTPError, error:
contents = error.read()
Wieso tritt der Fehler nur sporadisch auf und was kann man dagegen tun?
Gruss Jurgen
Re: http error
Verfasst: Montag 15. Oktober 2012, 11:27
von sparrow
Hast du schon einmal geschaut wofür der HTTP-Errorcode steht?
https://de.wikipedia.org/wiki/HTTP-Stat ... ver-Fehler
Re: http error
Verfasst: Montag 15. Oktober 2012, 11:36
von jurgen
ja... welcher server ist damit gemeint? die webseite auf die ich zugreifen möchte? Es ist meine eigene Website und die lief ohne Probleme.
Re: http error
Verfasst: Montag 15. Oktober 2012, 12:17
von BlackJack
@jurgen: Das ist die Antwort vom Webserver. Wenn das Deiner ist, dann kannst Du ja dort im Log nachsehen warum er 503 sendet.
Re: http error
Verfasst: Montag 15. Oktober 2012, 12:33
von /me
Das sollte bei einer hinreichend aktuellen Python Version etwas anders aussehen.
Re: http error
Verfasst: Montag 15. Oktober 2012, 12:52
von jurgen
BlackJack hat geschrieben:@jurgen: Das ist die Antwort vom Webserver. Wenn das Deiner ist, dann kannst Du ja dort im Log nachsehen warum er 503 sendet.
Hab nachgeschaut und der Server hat die 503 gesendet....
Das genau sollte mein Programm später erkennen und mich automatisch benachrichtigen. Dafür wollte ich die Zeilen der Seite auslesen und wenn die Anzahl unter 5 ist, ist der Server down.. Wenn allerdings das Programm, bevor es die Zeilenanzahl ausliest, automatisch abschaltet isses natürlich murks. Gibts ne andere Möglichkeit die Erreichbarkeit von nem Server zu testen?
Re: http error
Verfasst: Montag 15. Oktober 2012, 13:01
von jurgen
/me hat geschrieben:
Das sollte bei einer hinreichend aktuellen Python Version etwas anders aussehen.
Dank dir, aber ich bekomme immer noch den syntax error. Kann man den Befehl überhaupt dafür verwenden, dass das Programm im Falle eines http Errors weiterläuft oder bin ich aufm Holzweg?
Re: http error
Verfasst: Montag 15. Oktober 2012, 13:34
von Leonidas
Ja natürlich geht das. Wie alt ist dein Python denn?
Re: http error
Verfasst: Montag 15. Oktober 2012, 13:42
von jurgen
Leonidas hat geschrieben:Ja natürlich geht das. Wie alt ist dein Python denn?
Benutze die Version 2.6.8....
Re: http error
Verfasst: Montag 15. Oktober 2012, 13:43
von /me
jurgen hat geschrieben:Dank dir, aber ich bekomme immer noch den syntax error.
Gib mal bitte deine Python-Version und die exakte Fehlermeldung (copy&paste) hier an. Vorher können wir nur wild spekulieren ("Einrückung falsch", "Klammer in der Zeile davor nicht geschlossen", ...).
Re: http error
Verfasst: Montag 15. Oktober 2012, 13:50
von jurgen
/me hat geschrieben:jurgen hat geschrieben:Dank dir, aber ich bekomme immer noch den syntax error.
Gib mal bitte deine Python-Version und die exakte Fehlermeldung (copy&paste) hier an. Vorher können wir nur wild spekulieren ("Einrückung falsch", "Klammer in der Zeile davor nicht geschlossen", ...).
OK,- hier die Fehlermeldung
File "./control_website", line 18
except urllib2.HTTPError as error:
^
SyntaxError: invalid syntax
und hier nochmal das Programm
Code: Alles auswählen
import urllib
import urllib2
import base64
import smtplib
import os
url = "http://website.du"
authKey = base64.b64encode("user:pass")
headers = {"Content-Type":"application/json", "Authorization":"Basic " + authKey}
data = {"param":"value"}
request = urllib2.Request(url)
except urllib2.HTTPError as error:
for key,value in headers.items():
request.add_header(key,value)
response = urllib2.urlopen(request)
# Zeilenanzahl bestimmen.
lines = response.readlines()
# SMTP Mail tool konfigurieren
smtp = smtplib.SMTP
SENDMAIL = "/usr/sbin/sendmail"
FROM = "Control website"
TO = ["123@web.de"]
SUBJECT = "Website down"
TEXT = "Seite nicht aktiv"
if len(lines) < 5:
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
p = os.popen("%s -t -i" % SENDMAIL, "w")
p.write(message)
status = p.close()
Re: http error
Verfasst: Montag 15. Oktober 2012, 13:52
von sparrow
Re: http error
Verfasst: Montag 15. Oktober 2012, 22:21
von Leonidas
Oder eher: Blocksyntax ist Grundlage von Python.
Überhaupt glaube ich auch dass ``smtp = smtplib.SMTP`` nicht das macht was du denkst dass es macht, aber da du es eh nicht nutzt, sondern die die Mail über die veraltete Funktion ``os.popen`` versendest, fällt es nicht auf.
Re: http error
Verfasst: Dienstag 16. Oktober 2012, 08:40
von jurgen
Vielen Dank für die Antworten.Der Syntax error ist weg aber wieso ist response nun nicht mehr definiert?
Code: Alles auswählen
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
pass
lines = response.readlines()
Hier bekomme ich den Fehler
NameError: name 'response' is not defined
Re: http error
Verfasst: Dienstag 16. Oktober 2012, 08:46
von BlackJack
@jurgen: Weil im Falle einer Ausnahme `response` ganz offensichtlich nicht definiert wird. Was sollte in dem Fall denn Deiner Meinung nach an den Namen gebunden werden?
Und insgesamt, was erwartest Du denn von dem Code? Du sagst dort: wenn `urllib2.open()` wegen einem `HTTPError` fehlschlägt, dann ignoriere das und lies die Antwort vom Server trotzdem. Welche Antwort denn bei einem Fehler?
Re: http error
Verfasst: Dienstag 16. Oktober 2012, 08:59
von jurgen
Ich möchte letztendlich nur testen ob der Server läuft und mir automatisch ne emailbenarichtigung schicken lassen. Hatte mir das so überlegt, die Zeilen auszulesen und wenn der Server down ist, hat man nur 3 oder 4 Zeilen, nämlich:
"Service Temporarily Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.)
....vielleicht bin ich aufm falschen weg und es geht weitaus simpler....
Re: http error
Verfasst: Dienstag 16. Oktober 2012, 09:21
von jurgen
nun funktioniert es,- ohne Zeilen auslesen und gleich die mail verschicken.....Vielen Dank nochmal für die Hilfen.
Gruß Jurgen