Windows, CGIHTTPServer und cgi-bin : HILFE!!! Windoof ;(

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
za0
User
Beiträge: 17
Registriert: Mittwoch 22. September 2004, 19:50

Hi!

Ich habe Python 23 & (noch!)Windows XP

und

folgendes Problem:

Ich habe einen superbilligen HTTP-CGI-server gebaut:

# https python server

Code: Alles auswählen

[i]from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
serveraddress = ("",80)
server = HTTPServer(serveraddress, CGIHTTPRequestHandler)
server.serve_forever()[/i]
Jetzt habe ich in dem Ordner, indem sich das scrpt befindet, einen 'cgi-bin'-Ordner angelegt. Diesen Ordner habe ich zugänglichgemacht für 'Jeder'. Jeder hat vollzugriff auf dieses Verzeichnis, ABER(!)
das ist das einzige Verzeichnis, das nicht angezeigt wird.
Es kommt der Fehler:
Error response

Error code 403.

Message: CGI script is not a plain file ('/cgi-bin/').

Error code explanation: 403 = Request forbidden -- authorization will not help.
Ich habe sogar nen 'nobody'-User eingerichtet - ES WILL EINFACH NICHT FUNZEN! SCH**SS WINBLÖD! - sorry!

Die Python-Docs habe ich auch durchwühlt.

Hab nur das hier gefunden:
"Note that CGI scripts will be run with UID of user nobody, for security reasons. Problems with the CGI script will be translated to error 403."
Schön, da backen wir uns ein Eis drauf :evil:

Hat irgendjemand eine Idee, wie das Problem zu lösen ist?
Gast

Hi!
za0 hat geschrieben:
Message: CGI script is not a plain file ('/cgi-bin/').
Die fehlermeldung sagt, daß /cgi-bin/ keine datei, geschweige denn ein CGI-script, ist. Du mußt ein script im cgi-bin-ordner aufrufen, also z.B.: http://localhost:8080/cgi-bin/gaestebuch.py
Joe
za0
User
Beiträge: 17
Registriert: Mittwoch 22. September 2004, 19:50

Aha!

Jetzt versteh' ich: 'Er' 'assoziiert' das Verzeichnis direkt als CGI-Scritp, ja?

Danke ... :D aber ... :) :(

es läuft nicht!

ich habe folgendes Skript geschrieben und dann als 'hello.py'
abgespeichert:

Code: Alles auswählen

#!C:\Python23\python.exe -u

import cgi
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'
print '<html>'
print '<head>'
print '<title>TestPage</title>'
print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'
print '</head>'

print '<body>'

print '<h1> hello </h1>'

print '</body>'
print '</html>'
Dann hab ich es mit http://localhost/cgi-bin/hello.py aufgerufen -
der Server läuft auf Port 80 - und das Resultat ist ne leere Seite. Kein Titel, nix :?
joe

Moin!
za0 hat geschrieben: Dann hab ich es mit http://localhost/cgi-bin/hello.py aufgerufen -
der Server läuft auf Port 80 - und das Resultat ist ne leere Seite. Kein Titel, nix :?
print "Content-Type: text/html\n" muß die allererste print-anweisung lauten.
joe
za0
User
Beiträge: 17
Registriert: Mittwoch 22. September 2004, 19:50

:D Hallo Joe, hallo Pythoneers (!!!) :P

8) Ich habe die Lösung des Problems! 8)

Vorher möchte ich zu diesem Thread etwas sagen:
Das hier geschilderte Problem basiert eher weniger auf Programmier- oder Konfigurationsfehlern, als viel mehr auf "dem" Windows-Python-Problem, welches ich hier wie folgt darstellen will:
Python ist (meiner Meinung und - wie ich gelesen habe - von vielen anderen) für alle Betriebssysteme wie geschaffen, außer für die Windoof-Reihe (also Windows 9x, Me, NT 4, 2k, XP und 2003).

Ich habe unter "Eigene Dateien" (Windows XP) einen Ordner mit dem Namen 'python' erstellt und alle meine Progrämmschen da abgespeichert. Alles lief wunderbar, bis ich den "selbstgebauten" Python-Http-Server mit CGI Support gepythont habe. Ab da fing Python an mich zu nerven(!), denn es lief einfach nicht - trotz genauer Befolgung der Dokumentation, die mir vorlag.

Joe möchte ich hier ganz besonders meinen Dank aussprechen, denn durch Ihn bin ich auf den Fehler gekommen. Joe hat mir klargemacht, dass das Problem garnicht an den Zugriffsrechten des 'cgi-bin'-Ordners lag/liegt, wie auf der offiziellen Docuseite und in der Windoof-Python-Hilfe behauptet wird:
Note that CGI scripts will be run with UID of user nobody, for security reasons. Problems with the CGI script will be translated to error 403.
Der Python-Http-CGI-Server verbindet alles, was sich im
'cgi-bin'-Ordner, selbst den Ordner 'cgi-bin', mit cgi - mit anderen Worten:
Der Server behandelt das cgi-bin-Verzeichnis, sowie deren Inhalt, also
*.py-Files, wie Python-Script-Programme. Ich habe dies noch dadurch
bestetigt bekommen, als ich in dem 'cgi-bin'-Ordner eine hello.html
mit Inhalt erstellt habe und diese genau die selbe Fehlermeldung
verursacht hat, wie der Klick auf den 'cgi-bin'-Ordner aus http:\\localhost:80\ heraus : den Fehler 403 (!)
(siehe ganz oben in Fehlerbeschreibung).
Joe's zweite Antwort war natürlich ausschlaggebend, denn es gab
keine weiteren Möglichkeiten, wo sich ein Fehler hätte einschleichen
können. Selbst laut Docu hab ich 'alles' richtig gemacht.
print 'Content-Type: text/html\n'
muss einfach
rein. Es funzte einfach nicht!, trotz der Korrektheit von Joe's Hinweis!
Plötzlich viel mir was auf, als ich sauer den Web-Browser weggeklickt habe:
Im DOS-Eingabeaufforderungs-Fenster laß ich folgende (letzten) Zeilen:
localhost - - [23/Sep/2004 10:40:24] CGI script exit status 0x2
localhost - - [23/Sep/2004 10:40:27] "GET /cgi-bin/hello.py HTTP/1.1" 200 -
localhost - - [23/Sep/2004 10:40:27] command: c:\python23\python.exe -u C:\Dokum
ente und Einstellungen\root\Eigene Dateien\python\http_python_server\cgi-bin\hel
lo.py ""
localhost - - [23/Sep/2004 10:40:27] c:\python23\python.exe: can't open file 'C:
\Dokumente'

localhost - - [23/Sep/2004 10:40:27] CGI script exit status 0x2
localhost - - [23/Sep/2004 10:42:00] "GET /cgi-bin/hello.py HTTP/1.1" 200 -
localhost - - [23/Sep/2004 10:42:00] command: c:\python23\python.exe -u C:\Dokum
ente und Einstellungen\root\Eigene Dateien\python\http_python_server\cgi-bin\hel
lo.py ""
localhost - - [23/Sep/2004 10:42:01] c:\python23\python.exe: can't open file 'C:
\Dokumente'

localhost - - [23/Sep/2004 10:42:01] CGI script exit status 0x2
Das ist natürlich _NUR_ ein kleiner Ausschnitt aus dem Fenster! ;)
Ich will euch den Rest mal ersparre :P

:?: Fällt Euch was auf :?:
localhost - - [23/Sep/2004 10:42:01] c:\python23\python.exe: can't open file 'C:
\Dokumente'
Was ist also die ganze Zeit über passiert? Ganz einfach:
Der Browser konnte auf Windoofs tolles Verzeichnis "Dokumente und
Einstellungen" nicht zugreifen, aber es lag nicht an den Zugriffsrechten,
sondern einfach daran, dass die Verzeichnisbezeichnung von BLANKS
getrennt wird und der Python-Server das nicht rafft, weil das eben
unter Windows und NTFS nicht einfach _NUR_ ein Blank ist, sondern ein %20! Leute, die sich mit HTML auskennen und mit Windows
und Linux die Pfadstory erlebt haben wissen wovon ich rede:

Beispiel/Hinweis:
#file:///C:/Dokumente%20und%20Einstellungen/root/Eigene%20Dateien/python/001_hello_world.py

Es ist das :evil: VERDAMMTE(!) %20-Problem!

Meine Lösung:
Ich habe einen Ordner 'dev' in 'C:\' angelegt. Darunter noch einen
'python' und habe die Dateien da reinkopiert (also C:\dev\python)
und siehe da: ES FUNKTIONIERT!!! :D :D

Eine andere mögliche Lösung wäre es, den Server irgendwie von Hand auf
das 'C:\Dokumente und Einstellungen\root\Eigene Dateien\python'-
Verzeichnis einzustellen, also
C:\Dokumente%20und%20Einstellungen\root\Eigene%20Dateien\python

Vielleicht probiert das ja einer von euch aus!

Ich hoffe, dass dieser Thread einigen anderen Windows-Usern, die
mit Python und dem Python-HTTP-Server (mit cgi-Unterstützung arbeiten)
weiterhelfn wird ;)

Ich möchte Joe und allen Anderen, die in Ruhe mitgedacht haben, für ihre Unterstützung danken! Danke Python-People! :D

Grüße

za0
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi
dass die Verzeichnisbezeichnung von BLANKS
getrennt wird und der Python-Server das nicht rafft, weil das eben
unter Windows und NTFS nicht einfach _NUR_ ein Blank ist, sondern ein %20! Leute
%20 ist eine Hexzahl die Dezimal 32 ergiebt und 32 ist das ASCII Zeichen für ein Leerzeichen (Blank wie du es nennst)
Ist also genau dasselbe wie ein Leerzeichen. Wahrscheindlich wurde irgendwo der Pfad nicht in Anführungszeichen gesetzt und somit entstand das Problem.

Gruss
za0
User
Beiträge: 17
Registriert: Mittwoch 22. September 2004, 19:50

Wahrscheindlich wurde irgendwo der Pfad nicht in Anführungszeichen gesetzt und somit entstand das Problem.
Entweder ist das Servermodul falsch programmiert oder da muß irgendwo der Pfad gesetzt werden, weil der server das scheinbar nicht von alleine kann (siehe auch Lösungsvorschlag 2)

Grüße in die Schweiz

;)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi,

unter PHP gibts die Funktion urlencode mit der Sonderzeichen in url-pfaden maskiert werden, so auch " " als "%20" bei Python is sowas sicher auch in einem der vielen Module dabei.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ganz recht Dookie, das ist im Modul urllib dabei, da gibt es quote, unquote und urlencode. Zum Server in Python: der server soll ein naiver Testserver für Scripte sein, niemals ein Profiserver, der alles kann, was auch gängige HTTP-Server können. Das schmerzt, wenn man eben solche Features braucht. Aber das kann man sich dann halt mithilfe der Docu selber coden. Ich hab mir den Server als Testserver zum Beispiel auf Multitasking ausgelegt, um mitunter schneller Testseiten mit Frames zu laden:

Code: Alles auswählen

import CGIHTTPServer, SocketServer, socket

SERVERNAME = ""
PORT = 80
serveradresse=(SERVERNAME, PORT)

class MyServer(SocketServer.ThreadingTCPServer):
    allow_reuse_address = 1    # Seems to make sense in testing environment
    def server_bind(self):
        """Override server_bind to store the server name."""
        SocketServer.ThreadingTCPServer.server_bind(self)
        host, port = self.socket.getsockname()[:2]
        self.server_name = socket.getfqdn(host)
        self.server_port = port

class MyHandler(CGIHTTPServer.CGIHTTPRequestHandler):

    def is_cgi(self):
        """Tests whether self.path is a cgi-script"""
        path = self.path
        for x in self.cgi_directories:
            i = len(x)
            if path[:i] == x and (path[i+1:] and path[i] == '/'):
                self.cgi_info = path[:i], path[i+1:]
                return True
        return False
server = MyServer(serveradresse, MyHandler)
Zusätzlich gewährt der Server nun Einblick in das CGI-bin Verzeichnis - eigentlich eine Sicherheitslücke, die auch bei prof. Servern mit Zugriffsverweigerung (in dem Fall handling als Script) geahndet wird - gewährt. Kann man sich alles selber coden, wenn man es braucht, ist halt nur schade, dass es nicht Standartmäßig dabei ist, weil eben der Server nur zum Testen da ist. Ich meine genau diese Begründung auch mal in der Docu gelesen zu haben...

mfg, Milan
Slalomsk8er

Ich habe da eine ähnliches Problem.

Mein Server:

Code: Alles auswählen

#!/usr/bin/env python
import sys
from CGIHTTPServer import CGIHTTPRequestHandler
import BaseHTTPServer

class MyRequestHandler(CGIHTTPRequestHandler):
    # In diesem Verzeichnis sollten die CGI-Programme stehen:
    cgi_directories=["/cgi-bin"]


def run():
    # 8000=Port-Nummer
    #   --> http://localhost:8000/
    # Fuer http://localhost/ 
    #   Port-Nummer auf 80 setzen
    httpd=BaseHTTPServer.HTTPServer(('', 8000), MyRequestHandler)
    httpd.serve_forever()

if __name__=="__main__":
    print "Starting Server"
    run()

Mein CGI-script:

Code: Alles auswählen

#!/usr/bin/env python
import cgi
#import cgitb; cgitb.enable()

def main():
    print "Content-type: text/html\n"
    form = cgi.FieldStorage()   #parse query
    if form.has_key("firstname") and form["firstname"].value != "":
        print"<h1>Hallo", form["firstname"].value, "</h1>"
    else:
        print"<h1>Error! Please enter first name.</h1>", form

main()
cgi.test()
Mein HTML:

Code: Alles auswählen

<html>
<head>
	<Title>test</title>
</head>
<body>
	<form method="post" action="http://localhost:8000/cgi-bin/test.py">
		<p>Your first name: <input type="text" name="firstname">
		<p>Your last name: <input type="text" name="lastname">
		<p>Click here to submit form: <input type="submit" value="Yeah!">
		<input type="hidden" name="session" value="1f9a2">
	</form>
</body>
</html>
Mein Problem:

POST funktioniert nicht, mein test.py bekommt keine Werte aus dem Formular übermittelt!?

Was mein Server sagt:
Starting Server
localhost - - [21/Jan/2005 19:51:46] "GET / HTTP/1.1" 200 -
localhost - - [21/Jan/2005 19:51:49] "POST /cgi-bin/test.py HTTP/1.1" 200 -
localhost - - [21/Jan/2005 19:51:49] command: C:\Python24\python.exe -u D:\Pytho
n\cgi-bin\test.py ""
localhost - - [21/Jan/2005 19:51:50] CGI script exited OK

Code: Alles auswählen

<h1>Error! Please enter first name.</h1> FieldStorage(None, None, [])
Content-type: text/html


<H3>Current Working Directory:</H3>
D:\Python


<H3>Command Line Arguments:</H3>

['D:\\Python\\cgi-bin\\test.py', '']


<H3>Form Contents:</H3>
<P>No form fields.
<DL>
</DL>


<H3>Shell Environment:</H3>
<DL>
<DT> ALLUSERSPROFILE <DD> C:\Dokumente und Einstellungen\All Users
<DT> APPDATA <DD> C:\Dokumente und Einstellungen\xxx\Anwendungsdaten
<DT> COMMONPROGRAMFILES <DD> C:\Programme\Gemeinsame Dateien
<DT> COMPUTERNAME <DD> xxx

<DT> COMSPEC <DD> C:\WINDOWS\system32\cmd.exe
<DT> FP_NO_HOST_CHECK <DD> NO
<DT> HOMEDRIVE <DD> C:
<DT> HOMEPATH <DD> \Dokumente und Einstellungen\xxx
<DT> LOGONSERVER <DD> \\xxx

<DT> NUMBER_OF_PROCESSORS <DD> 1
<DT> OS <DD> Windows_NT
<DT> PATH <DD> C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programme\Gemeinsame Dateien\GTK\2.0\bin
<DT> PATHEXT <DD> .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
<DT> PROCESSOR_ARCHITECTURE <DD> x86

<DT> PROCESSOR_IDENTIFIER <DD> x86 Family 6 Model 4 Stepping 2, AuthenticAMD
<DT> PROCESSOR_LEVEL <DD> 6
<DT> PROCESSOR_REVISION <DD> 0402
<DT> PROGRAMFILES <DD> C:\Programme
<DT> PROMPT <DD> $P$G

<DT> SESSIONNAME <DD> Console
<DT> SYSTEMDRIVE <DD> C:
<DT> SYSTEMROOT <DD> C:\WINDOWS
<DT> TEMP <DD> C:\DOKUME~1\xxx~1\LOKALE~1\Temp
<DT> TMP <DD> C:\DOKUME~1\xxx~1\LOKALE~1\Temp

<DT> USERDOMAIN <DD> xxx
<DT> USERNAME <DD> xxx
<DT> USERPROFILE <DD> C:\Dokumente und Einstellungen\xxx
<DT> WINDIR <DD> C:\WINDOWS
</DL>


<H3>These environment variables could have been set:</H3>
<UL>
<LI>AUTH_TYPE
<LI>CONTENT_LENGTH
<LI>CONTENT_TYPE
<LI>DATE_GMT
<LI>DATE_LOCAL
<LI>DOCUMENT_NAME
<LI>DOCUMENT_ROOT
<LI>DOCUMENT_URI
<LI>GATEWAY_INTERFACE
<LI>LAST_MODIFIED
<LI>PATH
<LI>PATH_INFO

<LI>PATH_TRANSLATED
<LI>QUERY_STRING
<LI>REMOTE_ADDR
<LI>REMOTE_HOST
<LI>REMOTE_IDENT
<LI>REMOTE_USER
<LI>REQUEST_METHOD
<LI>SCRIPT_NAME
<LI>SERVER_NAME
<LI>SERVER_PORT
<LI>SERVER_PROTOCOL
<LI>SERVER_ROOT
<LI>SERVER_SOFTWARE
</UL>
In addition, HTTP headers sent by the server may be passed in the
environment as well.  Here are some common variable names:
<UL>
<LI>HTTP_ACCEPT

<LI>HTTP_CONNECTION
<LI>HTTP_HOST
<LI>HTTP_PRAGMA
<LI>HTTP_REFERER
<LI>HTTP_USER_AGENT
</UL>

<H3>What follows is a test, not an actual exception:</H3>

<H3>Traceback (most recent call last):</H3>
<PRE>  File "C:\Python24\lib\cgi.py", line 911, in test
    g()
  File "C:\Python24\lib\cgi.py", line 909, in g
    f()
  File "C:\Python24\lib\cgi.py", line 907, in f
    exec "testing print_exception() -- <I>italics?</I>"
  File "<string>", line 1
    testing print_exception() -- <I>italics?</I>

                          ^
<B>SyntaxError: invalid syntax
</B></PRE>
<H1>Second try with a small maxlen...</H1>

<H3>Current Working Directory:</H3>
D:\Python


<H3>Command Line Arguments:</H3>

['D:\\Python\\cgi-bin\\test.py', '']


<H3>Form Contents:</H3>
<P>No form fields.

<DL>
</DL>


<H3>Shell Environment:</H3>
<DL>
<DT> ALLUSERSPROFILE <DD> C:\Dokumente und Einstellungen\All Users
<DT> APPDATA <DD> C:\Dokumente und Einstellungen\xxx\Anwendungsdaten
<DT> COMMONPROGRAMFILES <DD> C:\Programme\Gemeinsame Dateien

<DT> COMPUTERNAME <DD> xxx
<DT> COMSPEC <DD> C:\WINDOWS\system32\cmd.exe
<DT> FP_NO_HOST_CHECK <DD> NO
<DT> HOMEDRIVE <DD> C:
<DT> HOMEPATH <DD> \Dokumente und Einstellungen\xxx

<DT> LOGONSERVER <DD> \\xxx
<DT> NUMBER_OF_PROCESSORS <DD> 1
<DT> OS <DD> Windows_NT
<DT> PATH <DD> C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programme\Gemeinsame Dateien\GTK\2.0\bin
<DT> PATHEXT <DD> .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

<DT> PROCESSOR_ARCHITECTURE <DD> x86
<DT> PROCESSOR_IDENTIFIER <DD> x86 Family 6 Model 4 Stepping 2, AuthenticAMD
<DT> PROCESSOR_LEVEL <DD> 6
<DT> PROCESSOR_REVISION <DD> 0402
<DT> PROGRAMFILES <DD> C:\Programme

<DT> PROMPT <DD> $P$G
<DT> SESSIONNAME <DD> Console
<DT> SYSTEMDRIVE <DD> C:
<DT> SYSTEMROOT <DD> C:\WINDOWS
<DT> TEMP <DD> C:\DOKUME~1\xxx~1\LOKALE~1\Temp

<DT> TMP <DD> C:\DOKUME~1\xxx~1\LOKALE~1\Temp
<DT> USERDOMAIN <DD> xxx
<DT> USERNAME <DD> xxx
<DT> USERPROFILE <DD> C:\Dokumente und Einstellungen\xxx

<DT> WINDIR <DD> C:\WINDOWS
</DL>

Hat Jemand eine Idee?

Und wie starte ich den Multitasking Server von Oben?

Gruss, Dominik
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Rein technisch kann ich keinen Fehler erkennen. Praktisch habe ich aber auch schon die Erfahrung gemacht, dass Brwoser ohne ein enctype manchmal Probleme mit Post haben. Änder deine Formularzeile einfach mal und probiers damit:

Code: Alles auswählen

<form method="post" action="http://localhost:8000/cgi-bin/test.py" ENCTYPE="multipart/form-data">
Vielleicht liegt es daran. :roll:
Zuletzt geändert von Milan am Freitag 21. Januar 2005, 22:43, insgesamt 1-mal geändert.
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Milan hat wohl recht, das einzige was mit ins Auge fällt, ist das hier

Code: Alles auswählen

<h1>Error! Please enter first name.</h1> FieldStorage(None, None, [])
Content-type: text/html
Bei deiner Ausgabe wird ein Header nach HTML Code gesendet.
Wird wohl durch cgi.test() kommen..
Slalomsk8er

Auf ein neues:

Code: Alles auswählen

#!/usr/local/bin/python
import cgi
#import cgitb; cgitb.enable()

def main():
    print "Content-type: text/html\n"
    print "<html>"
    print "<head>"
    print "<title>test.py</title>"
    print "</head>"
    print "<body>"
    form = cgi.FieldStorage()   #parse query
    if form.has_key("firstname") and form["firstname"].value != "":
        print "<h1>Hallo", form["firstname"].value, "</h1>"
    else:
        print "<h1>Error! Please enter first name.</h1>"
        print form
    print "</body>"
    print "</html>"
main()
#cgi.test()
Starting Server
localhost - - [21/Jan/2005 22:50:37] "GET / HTTP/1.1" 200 -
localhost - - [21/Jan/2005 22:50:39] "POST /cgi-bin/test.py HTTP/1.1" 200 -
localhost - - [21/Jan/2005 22:50:39] command: C:\Python24\python.exe -u D:\Pytho
n\cgi-bin\test.py ""
localhost - - [21/Jan/2005 22:50:40] CGI script exited OK

Code: Alles auswählen

<html>
<head>
	<Title>test</title>
</head>
<body>
	<form method="post" action="http://localhost:8000/cgi-bin/test.py" enctype="multipart/form-data">
		<p>Your first name: <input type="text" name="firstname">
		<p>Your last name: <input type="text" name="lastname">
		<p>Click here to submit form: <input type="submit" value="Yeah!">

		<input type="hidden" name="session" value="1f9a2">
	</form>
</body>
</html>
Und so steht es ums Resultat:

Code: Alles auswählen

<html>
<head>
<title>test.py</title>
</head>
<body>
<h1>Error! Please enter first name.</h1>
FieldStorage(None, None, [])
</body>
</html>
IE und Firefox, das selbe Resultat :cry:
Ich bin nun wirklich mit meinen Latein am Ende.

Was macht der code bei euch?

Gruss, Dominik
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Selbes Resultat bei mir, sowohl mit meinem als auch deinem Server. Vielleicht mag er nicht aus HTML nach py zu übergeben, soll heißen, verusch mal die HTML Seite per CGI zu erstellen und dann nochmal ein Versuch zu starten... ansonsten weiß ich auch net mehr weiter, dazu müsste ich mir die Quelltexte der Module nochmal reinziehen... bes. das vom CGI, da per GET ein querry übergeben wird, welcher aber nicht ausgewertet wird. :?: :roll:
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Ich glaub ich hab den Hundling *g*

Code: Alles auswählen

 action="http://localhost:8000/cgi-bin/test.py"
Gib mal den relativen Pfad zum CGI Script an.

MfG
Andreas
Gast

action="cgi-bin/test.py"
Macht das selbe, wüste auch nicht, was das hätte ändern sollen.

Gruss, Dominik
Slalomsk8er

Code: Alles auswählen

def main():
    print "Content-type: text/html\n"
    print "<html>"
    print "<head>"
    print "<title>test.py</title>"
    print "</head>"
    print "<body>"
    print ' <form method="post" action="test.py" enctype="multipart/form-data">'
    print ' <p>Your first name: <input type="text" name="firstname">'
    print ' <p>Your last name: <input type="text" name="lastname">'
    print ' <p>Click here to submit form: <input type="submit" value="Yeah!">'
    print "</form>"
    print "</body>"
    print "</html>"
main()
Nun ist das HTML von test1.py generiert und funzt immer noch nicht :cry: (genau gleich wie vorher)

Gruss, Dominik
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

HI. Dann nur noch ein letzter Test: ich möchte wissen, ob es an den Libary's liegt. Stell mal bitte von POST auf GET um, und lass im CGI-Script sowohl form als auch os.environ ausgeben. Dann müsste aus dem log im Server erkennbar sein, ob a) ein querry übergeben wird b) aus os.environ auszulesen sein, ob einer ankommt (wenn nicht Fehler im Server irgendwo) und c) dieser querry verarbeitet wird (form), was Aufgabe des Moduls cgi ist. Danach guck ich mir mal die Quelltexte an und such ein wenig :wink:
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Brauchst du doch nicht zu machen. Ich schau mir jetzt mal die Quelltexte von CGIHTTPServer und SocketServer/BaseHTTPServer an. Da muss in der 2.4er Version ein BUG drin sein, bei mir kommen die Querrys nicht an (werden nicht in os.environ aufgeführt). Ist mir bis jetzt nur nicht aufgefallen, weil ich vor allem Scripte laufen hab, die ohne Formularangaben auskommen.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi nochmal. Es handelt sich um einen bekannten Bug, er wurde behoben (siehe Link). Ursache war wohl ein Fehler in der Handlerclass (Modul CGIHTTPServer), wobei jetzt statt mit os.popen mit dem neuem subprocess Modul gearbeitet wird. Einfach die neue Datei downloaden und damit die alte ersetzen, dann sollte es laufen. Bei mir tut es das jetzt auch. Ich glaube, es ist ein Update auf Python 2.4.1 angebracht, wenn das bald rauskommt...

mfG Milan
Antworten