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?
CGIHTTPServer führt unter Windows kein CGIs aus
-
- User
- Beiträge: 42
- Registriert: Montag 8. November 2010, 15:25
- Wohnort: Braunschweig
- Kontaktdaten:
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
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.
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.
-
- User
- Beiträge: 42
- Registriert: Montag 8. November 2010, 15:25
- Wohnort: Braunschweig
- Kontaktdaten:
Das hab ich natürlich schon probiert: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.
Testscript abgespeichert im Ordner c:/www/cgi-bin/ als test.cgi
#!c:/Python26/python.exe
print "Content-Type: text/html"
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.
-
- User
- Beiträge: 42
- Registriert: Montag 8. November 2010, 15:25
- Wohnort: Braunschweig
- Kontaktdaten:
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)
@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?
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
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.
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
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
also ich kann den Fehler nachvollziehen, auch wenn man korrekt auf Port 8080 den Aufruf startet...
Gruß, noisefloor
also ich kann den Fehler nachvollziehen, auch wenn man korrekt auf Port 8080 den Aufruf startet...
Gruß, noisefloor
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
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
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
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
- daemonTutorials
- User
- Beiträge: 171
- Registriert: Sonntag 6. Februar 2011, 12:06
- Kontaktdaten:
Müsste es nicht eine Option für den PyCGIServer geben, welche Dateiendung welchen Interpreter ausführen??
LG Maik