Seite 1 von 2

Cgi Skript leitet weiter aber dann error

Verfasst: Donnerstag 19. März 2020, 22:51
von Mister
Hallo Leute,
Ich fange gerade mit der Programmierung einer Website an und habe einen login erstellt. Das ist eine HTML Seite auf einem apache Server auf meinem raspberrypi. Ich habe Auch einen python cgi Script der die Seite auswertet nd bei Knopfdruck auf der Seite das passwort usw überprüft. Dann, wenn das passwort stimmt wird der User zu seiner persönlichen Seite weitergeleitet(ich habe von Hand mehrere "acciuntseiten" erstellt) , und das klappt auch gut mit der Erstellung des URLs. Der URL stimmt auch und die Seite existiert so. Nur sagt der Browser das der Server einen "internal server error" hat.
Im Internet steht das das alles mögliche sein kann. Aber ich habe kein plan was es ist.. Hat jemand eine Idee warum genau die Seite nicht geladen wird?
Danke für antworten

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Donnerstag 19. März 2020, 23:00
von Sirius3
CGI ist völlig veraltet und apache alles andere als leicht zu konfigurieren.
Benutze Flask oder Django und deren eingebaute Server und vergiss CGI und apache.

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Donnerstag 19. März 2020, 23:44
von __blackjack__
@Mister: Der Grund für einen 5xx-er Error steht in der Regel im Fehlerlog vom Webserver.

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 02:05
von Mister
__blackjack__ hat geschrieben: Donnerstag 19. März 2020, 23:44 @Mister: Der Grund für einen 5xx-er Error steht in der Regel im Fehlerlog vom Webserver.
Ah ja danke für den Tipp da werde ich mal nachsehen
Sirius3 hat geschrieben: Donnerstag 19. März 2020, 23:00 CGI ist völlig veraltet und apache alles andere als leicht zu konfigurieren.
Benutze Flask oder Django und deren eingebaute Server und vergiss CGI und apache.
Ich habe halt so ein Buch gekauft und da war das halt erklärt also habe ich es damit gemacht
Aber danke für den Tipp mit flask usw, das werde ich mir mal ansehen

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 09:44
von noisefloor
Hallo,
Ich habe halt so ein Buch gekauft und da war das halt erklärt also habe ich es damit gemacht
Dann muss man das Buch leider auch in Frage stellen. CGI ist seit > 10 Jahren nicht mehr Stand der Dinge, Webprogrammierung macht man mit Python via WSGI unter Einsatz eines Webframeworks wie Flask oder Django etc. Flask ist für kleine Sache einfacher. Wobei eigentlich mit Flask & Co alles einfacher ist als CGI.

Alle Webframeworks haben einen kleinen Server an Bord, ansonsten nimmt man einen WSGI-Applikationsserver wie gunicorn, ggf. noch mit nginx als Reverse Proxy davor. Hört sich kompliziert an, ist aber einfacher als CGI + Apache.

Gruß, noisefloor

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 10:01
von __blackjack__
Hm, vielleicht liegt das daran das man Apache gewohnt ist, aber so wirklich kompliziert ist der für viele Sachen IMHO *nicht*. Klar kann man da sehr komplexe Konfigurationen damit/dafür basteln, aber die Standardsachen sind tausendfach im Netz erklärt, weil das Ding so alt ist und das so oft gemacht wird. Und Apache ist in der Regel unter Linux auch der Standardwebserver. Sowie man irgendwas installiert was PHP verwendet, hat man in aller Regel auch den Apache als Abhängigkeit dabei.

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 10:18
von paddie
Ich seh es ähnlich. Ob ich jetzt gunicorn mit Apache oder nginx nehme ist vom Konfigurationsaufwand imho ähnlich einfach/umständlich.
Allerdings würde ich grade auf einem raspi vielleicht eher zu nginx, weil der doch noch ein wenig schlanker als Apache ist ;-).

Zu beiden Szenarien sollten sich auch Anleitungen finden lassen..

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 16:31
von Mister
Danke für die Tipps! Wo finde ich eigentlich die Error logs vom apache 2 server beim Rpi?

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 16:34
von __deets__
Da wo du sie auch in jedem anderen Linux System findest. Hast du mal gegoogelt?

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 16:45
von Mister
__deets__ hat geschrieben: Freitag 20. März 2020, 16:34 Da wo du sie auch in jedem anderen Linux System findest. Hast du mal gegoogelt?
Ja jetzt schon
Im error log steht: end of script output before headers: (meine Datei).html
Was muss ich ändern?

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 17:19
von __blackjack__
@Mister: CGI-Skripte sind dafür verantwortlich eine komplette HTTP-Antwort zu erzeugen. Mit Headern und Body (sofern es einen gibt). Und das wird durch eine Leerzeile voneinander getrennt. Du musst das also so ändern das eine komplette, korrekte HTTP-Antwort von Deinem Code ausgegeben wird. Oder eben kein CGI benutzen. Selbst WSGI-Anwendungen kann man zur Not per CGI anbinden wenn es denn unbedingt sein muss.

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 17:49
von Mister
Der cgi Skript überprüft ordnungsgemäß die Eingaben und erstellt dann die richtige httpseite die zum entsprechenden persönlichen Bereich weiterleitet. Der URL der Seite stimmt auch aber beim Aufruf bekomme ich dann den Server internal error. Das heisst doch dass die Übertragung oder Auswertung der HTML Seite scheitert oder nicht?

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 17:56
von noisefloor
Hallo,

beim Aufruf von was? Zeig' doch mal dein CGI-Skript hier. Dann braucht niemand raten.

Gruß, noisefloor

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 17:57
von __blackjack__
@Mister: Nein, HTML-Seiten werden nicht ausgewertet, die Ausgabe des CGI-Skriptes wird vom Webserver geprüft ob die formal eine gültige HTTP-Antwort ist. Und das ist sie nicht.

Das Du ein CGI-Skript mit der Dateiendung *.html hast ist zwar nicht verboten, aber etwas ungewöhnlich.

Und wie schon gesagt CGI macht man heute nicht mehr. Wenn Du das machen willst, musst Du Dich halt auch mit HTTP auseinandersetzen. Da muss erst eine Statuszeile, dann Header, dann eine Leerzeile, und dann der Körper der Antwort kommen. Guckst Du beispielsweise auf Wikipedia: https://en.wikipedia.org/wiki/Hypertext ... r_Protocol

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Freitag 20. März 2020, 21:23
von Mister
Das ist mein cgi skript:

Code: Alles auswählen

#! /usr/bin/python3
import cgi, cgitb
cgitb.enable()
response="""Content-type: text/html; charset=utf-8

<html>
<head>
<title>Login..</title>
<meta http-equiv="refresh" content="2;URL={}">
</head>

<body>Login...</body></html>"""
form=cgi.FieldStorage()
password=form.getvalue("pwrd")
name=form.getvalue("usrnm")
if (password=="abc" and name=="peter")==True:
    path="mainpeter"
elif (password=="def" and name=="fritz")==True:
    path="mainfritz"
else:
    path="error_login"
newURL=("users_lib/"+path+".html")
print(response.format(newURL))
Mainfritz und mainPeter sind halt test html seiten im zu sehen ob es funktioniert. Das skript prüft die Passwörter usw und erstellt Dan einen entsprechenden URL.

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Samstag 21. März 2020, 00:40
von __blackjack__
@Mister: `pwrd` und `usrnm`? Was soll dass denn? Klopapier ist knapp, aber an Buchstaben auf Kosten der Verständlichkeit braucht man wirklich nicht sparen.

Die Vergleiche mit ``== True`` sind unnütz, der Ausdruck davor liefert ja bereits einen Wahrheitswert.

Das ``if``-Konstrukt ist zudem so regelmässig und einfach, dass man das durch ein Wörterbuch ersetzen sollte das Name und Passwort auf den Pfadteil abbildet.

Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `new_url` statt `newURL`.

Code: Alles auswählen

#!/usr/bin/python3
import cgi
import cgitb

cgitb.enable()
response = """Content-type: text/html; charset=utf-8

<html>
<head>
  <title>Login..</title>
  <meta http-equiv="refresh" content="2;URL={}">
</head>
<body>Login...</body>
</html>"""

credentials_to_path = {
    ("peter", "abc"): "mainpeter",
    ("fritz", "def"): "mainfritz",
}

form = cgi.FieldStorage()
path = credentials_to_path.get(
    (form.getvalue("username"), form.getvalue("password")), "error_login"
)
print(response.format("users_lib/{}.html".format(path)))
Den Fehlermeldungen nach scheint die HTML-Datei auf die umgeleitet wird als CGI-Skript angesehen zu werden und nicht als HTML-Datei.

Hat eigentlich schon mal jemand erwähnt, dass man heutzutage kein CGI mehr macht? Die Anbindung du jour heisst WSGI. Und es gibt da auch wirklich ganz kleine Rahmenwerke. Neben Flask beispielsweise auch Bottle. Das ist nur eine einzige Datei.

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Samstag 21. März 2020, 01:51
von Mister
Ja wie gesagt war das halt so in dem python Buch gezeigt und eswegen habe ich es so gemacht
Aber ich schaue mit bottle usw mal an

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Montag 23. März 2020, 01:32
von Mister
Nur ist der cgi skript garnicht das Problem glaube ich. Der leitet mich nämlich immer korrekt weiter und der richtige URL wird aufgerufen. Nur nach dem Aufruf kommt dann der Error. Die HTML Datei ist auch nicht beschädigt oder fehlerhaft, man kann sie in ihrem Verzeichnis öffnen. Nur der Aufruf über den Server scheitert, aber nicht weil es nicht vorhanden ist sondern wegen etwas anderem. Was könnte das sein???

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Montag 23. März 2020, 07:06
von Sirius3
Du hast apache so konfiguriert, dass er alle Seiten als CGI interpretiert. Hat __blackjack__ schon vermutet. Ohne die Konfigurationsdatei zu kennen, kann das natürlich niemand sicher sagen.

Re: Cgi Skript leitet weiter aber dann error

Verfasst: Montag 23. März 2020, 13:26
von Mister
Aber meine ganzen anderen Seiten die auf dem Server miteinander verlinkt sind funktionieren alle. Nur diese beiden Seiten nicht