http error

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

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
Benutzeravatar
sparrow
User
Beiträge: 4600
Registriert: Freitag 17. April 2009, 10:28

Hast du schon einmal geschaut wofür der HTTP-Errorcode steht?

https://de.wikipedia.org/wiki/HTTP-Stat ... ver-Fehler
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

ja... welcher server ist damit gemeint? die webseite auf die ich zugreifen möchte? Es ist meine eigene Website und die lief ohne Probleme.
BlackJack

@jurgen: Das ist die Antwort vom Webserver. Wenn das Deiner ist, dann kannst Du ja dort im Log nachsehen warum er 503 sendet.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

jurgen hat geschrieben:

Code: Alles auswählen

except urllib2.HTTPError, error:
Das sollte bei einer hinreichend aktuellen Python Version etwas anders aussehen.

Code: Alles auswählen

except urllib2.HTTPError as error:
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

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?
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

/me hat geschrieben:
jurgen hat geschrieben:

Code: Alles auswählen

except urllib2.HTTPError, error:
Das sollte bei einer hinreichend aktuellen Python Version etwas anders aussehen.

Code: Alles auswählen

except urllib2.HTTPError as error:
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?
Zuletzt geändert von jurgen am Montag 15. Oktober 2012, 13:43, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja natürlich geht das. Wie alt ist dein Python denn?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

Leonidas hat geschrieben:Ja natürlich geht das. Wie alt ist dein Python denn?
Benutze die Version 2.6.8....
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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", ...).
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

/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()
	

Benutzeravatar
sparrow
User
Beiträge: 4600
Registriert: Freitag 17. April 2009, 10:28

http://wiki.python-forum.de/try...except
und natürlich:
http://docs.python.org/tutorial/errors.html

Behandlung von Ausnahmen sind Grundlagen von Python.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

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
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?
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

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....
jurgen
User
Beiträge: 9
Registriert: Montag 15. Oktober 2012, 10:59

nun funktioniert es,- ohne Zeilen auslesen und gleich die mail verschicken.....Vielen Dank nochmal für die Hilfen.
Gruß Jurgen
Antworten