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
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:

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:
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?

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
http://wiki.python-forum.de/try...except
und natürlich:
http://docs.python.org/tutorial/errors.html

Behandlung von Ausnahmen sind Grundlagen von Python.

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