Seite 1 von 1
CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Freitag 19. November 2010, 17:30
von ulrich1992
Ich baue mir gerade einen einfachen Webserver mittels des Moduls CGIHttpServer.
Ich habe jetzt das Problem das wenn ich unter Windows versuche ein CGI Script auszuführen folgende Fehlermeldung kommt:
Error code 403.
Message: CGI script is not executable ('/cgi-bin/test.cgi').
Error code explanation: 403 = Request forbidden -- authorization will not help.
Unter OpenSolaris und Ubuntu Linux funktioniert es, (nach dem üblichen chmod 0755) hingegen wie es soll.
Die restlichen Serverfunktionen der Klasse funktionieren alle ohne Probleme unter Windows.
Ich hab mit Google gesucht und nichts zu meinem Problem gefunden.
Python Version ist 2.6.
Braucht ihr meinen Quellcode?
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 16:35
von Sr4l
Späte Antwort.
Windows weiß nicht wie er .cgi ausführen soll. Steht in der .cgi in der ersten Zeile ein: '#!/usr/......' ?
Das würde erklären warum Linux es kann. Versuch mal, wenn es sich um ein Python Script handelt, mit .cgi in .py umbennen. Oder ändere die erste Zeile auf die python.exe um z.B '#!C:/Python26/python.exe', ob dein Server das kann weiß ich nicht, wie es mit Leerzeichen aussieht auch nicht.
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 16:49
von ulrich1992
Sr4l hat geschrieben:Späte Antwort.
Windows weiß nicht wie er .cgi ausführen soll. Steht in der .cgi in der ersten Zeile ein: '#!/usr/......' ?
Das würde erklären warum Linux es kann. Versuch mal, wenn es sich um ein Python Script handelt, mit .cgi in .py umbennen. Oder ändere die erste Zeile auf die python.exe um z.B '#!C:/Python26/python.exe', ob dein Server das kann weiß ich nicht, wie es mit Leerzeichen aussieht auch nicht.
Das hab ich natürlich schon probiert:
Testscript abgespeichert im Ordner c:/www/cgi-bin/ als test.cgi
#!c:/Python26/python.exe
print "Content-Type: text/html"
print
print "Hallo Welt"
Aufruf
http://localhost/cgi-bin/test.cgi
Ergebnis:
Error response
Error code 403.
Message: CGI script is not executable ('/cgi-bin/test.cgi').
Error code explanation: 403 = Request forbidden -- authorization will not help.
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 16:54
von Sr4l
Dann solltest du mal nen minimal Beispiel vom Server veröffentlichen für weitere Hilfe.
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 17:04
von ulrich1992
Code: Alles auswählen
import sys, os, SocketServer, BaseHTTPServer, CGIHTTPServer, socket, time
class ThreadingCGIServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
pass
DocumentRoot="c:/www/"
port=8080
os.chdir(DocumentRoot)
os.environ["DOCUMENT_ROOT"]=os.getcwd()
Handler=CGIHTTPServer.CGIHTTPRequestHandler
Handler.cgi_directories=['/cgi-bin', '/htbin']
try:
httpd = ThreadingCGIServer(('',port), Handler)
print "Server started"
except:
print "Error:Can't bind to socket"
sys.exit(0)
try:
httpd.serve_forever()
except:
print "Server Stopped"
sys.exit(0)
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 19:16
von BlackJack
@ulrich1992: Sieht so aus als wenn der auf Port 8080 läuft, der steht bei Deiner Beispiel-URL aber nicht!? Kann es sein, dass Du einen anderen HTTP-Server am laufen hast und *der* diese Rückmeldung gibt?
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 20:02
von Sr4l
Unter Windows funktioniert das Interpretieren der ersten Zeile in der Datei nicht.
Wenn eine Dateiendung kein Programm zugeordnet ist wird es als nicht ausführbar gekennzeichnet.
Du kannst CGIHTTPHandler Monkey patchen, damit er noch andere Endungen
Python zuordnet.
Code: Alles auswählen
import CGIHTTPServer
class CGIHTTPRequestHandler(CGIHTTPServer.CGIHTTPRequestHandler):
def is_python(self, path):
"""Test whether argument path is a Python script."""
head, tail = os.path.splitext(path)
return tail.lower() in (".py", ".pyw", ".cgi")
Handler=CGIHTTPRequestHandler
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 20:03
von noisefloor
Hallo,
also ich kann den Fehler nachvollziehen, auch wenn man korrekt auf Port 8080 den Aufruf startet...
Gruß, noisefloor
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 20. Dezember 2010, 20:05
von noisefloor
Hallo,
Nachtrag: Wenn man das CGI-Skript direkt in c:/www platziert funktioniert es. Bzw. es funktioniert nicht wirklich, weil, wie Sr4L sagt, unter Windows das CGI-Skript nicht ausgeführt wird. Aber es wird immerhin zum Download angeboten.
Gruß, noisefloor
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Sonntag 20. Februar 2011, 21:55
von noisefloor
Hallo,
hatte gerade das gleiche Problem (schon doof, wenn man Code von Linux auf Windows portieren muss

).
Es funktioniert, wenn die CGI-Skripte die Endung '.py' haben und _nicht_ '.cgi'. cgi wird scheinbar geblockt, weil Windows mit der Endung nichts anfangen kann, py ist für den Python Interpreter reserviert = bekannt.
Gruß, noisefloor
Re: CGIHTTPServer führt unter Windows kein CGIs aus
Verfasst: Montag 28. Februar 2011, 21:36
von daemonTutorials
Müsste es nicht eine Option für den PyCGIServer geben, welche Dateiendung welchen Interpreter ausführen??