Seite 1 von 1

CGIHTTPRequestHandler funktioniert nicht

Verfasst: Montag 4. April 2011, 20:15
von daemonTutorials
Da dies zu TCP/IP gehört habe ich es hier gepostet.

Also, mein Problem ist, dass mein CGIHTTPRequestHandler nicht funktioniert, nämlich Python-seits.
Python gibt aus, dass 'TCPServer' kein Attribut namens 'server_name' hat.

Hier die Fehlermeldung:

Code: Alles auswählen

Exception happened during processing of request from ('127.0.0.1', 41021)
Traceback (most recent call last):
  File "/usr/lib/python3.1/socketserver.py", line 281, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python3.1/socketserver.py", line 307, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python3.1/socketserver.py", line 320, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python3.1/socketserver.py", line 614, in __init__
    self.handle()
  File "/usr/lib/python3.1/http/server.py", line 352, in handle
    self.handle_one_request()
  File "/usr/lib/python3.1/http/server.py", line 346, in handle_one_request
    method()
  File "/usr/lib/python3.1/http/server.py", line 605, in do_GET
    f = self.send_head()
  File "/usr/lib/python3.1/http/server.py", line 875, in send_head
    return self.run_cgi()
  File "/usr/lib/python3.1/http/server.py", line 964, in run_cgi
    env['SERVER_NAME'] = self.server.server_name
AttributeError: 'TCPServer' object has no attribute 'server_name'

Hier das CGI-Skript(cgi-bin/test.py):

Code: Alles auswählen

import cgi
import cgitb; cgitb.enable()

print("Content-Type: text/html")
print("")

print("<html><head><title>Test</title></head><body><h1>Hello World!</h1></body></html>")
Und hier der Server:

Code: Alles auswählen

import http.server
import socketserver

PORT = 8000
HTTP = ""

handler = http.server.CGIHTTPRequestHandler
httpd = socketserver.TCPServer((HTTP, PORT), handler)

httpd.serve_forever()
Soweit ist alles okay, aber anscheinend hat Python ein Fehler im TCPServer-Modul entdeckt. Vllt. liegt es auch bei dem CGIHTTPRequestHandler.

Empfehlt ihr mir, den nochmal neu zu schreiben, aber dann mit dem BasicHTTPServer?

Re: CGIHTTPRequestHandler funktioniert nicht

Verfasst: Montag 4. April 2011, 21:48
von deets
So geht's bei mir:

Code: Alles auswählen


import http.server
import socketserver

PORT = 8000
HTTP = ""

handler = http.server.CGIHTTPRequestHandler
httpd = socketserver.TCPServer((HTTP, PORT), handler)
httpd.server_name = "test"
httpd.server_port = PORT

httpd.serve_forever()
Ich hab' das aber einfach zurechtgefummelt. Ob das wirklich ein Bug ist oder nicht... kA.

Re: CGIHTTPRequestHandler funktioniert nicht

Verfasst: Dienstag 5. April 2011, 14:49
von daemonTutorials
Achso! Man muss diese Attribute wahrscheinlich setzen, um den Server auszuweisen!

Vielen Dank, ich probiere es gleich aus!

EDIT: Es funktioniert!

Re: CGIHTTPRequestHandler funktioniert nicht

Verfasst: Dienstag 5. April 2011, 16:51
von deets
daemonTutorials hat geschrieben:Achso! Man muss diese Attribute wahrscheinlich setzen, um den Server auszuweisen!
Glaube ich nicht. Der Port zB ist ja etwas, das inferiert werden koennte - man uebergibt ihn ja. Mindestens der ist IMHO ein Bug. Und bei dem server_namen koennte man auch ein graceful fallback haben, zB zu localhost oder sowas.

Re: CGIHTTPRequestHandler funktioniert nicht

Verfasst: Dienstag 5. April 2011, 17:26
von ms4py
Du musst schon den HTTPServer verwenden, dazu ist er da:
http://docs.python.org/py3k/library/http.server.html
Er definiert die Attribute:
http://hg.python.org/cpython/file/defau ... er.py#l126

Code: Alles auswählen

import http.server

PORT = 8000
HTTP = ""

handler = http.server.CGIHTTPRequestHandler
httpd = http.server.HTTPServer((HTTP, PORT), handler)

httpd.serve_forever()
(ungetestet)

Re: CGIHTTPRequestHandler funktioniert nicht

Verfasst: Dienstag 5. April 2011, 20:29
von daemonTutorials
@ms4py: Funktioniert auch. Aber ich bleibe bei meinem TCPServer, ist ja das gleiche, oder?

Jetzt habe ich aber ein anderes Problem:
Ich habe mir PHP5 installiert. Nun will ich wissen, welche Shebang ich setzen muss. Und was ich in der php.ini setzen muss.

Ich habe es mit folgenden versucht:

Code: Alles auswählen

#!/usr/bin/php5
#!/usr/bin/php5-cgi
Bei PHP5 kommt nix raus, bei php-cgi wird etwas in der Konsole ausgegeben.
Hier der ServerCode: http://www.python-forum.de/pastebin.php?mode=view&s=179

Re: CGIHTTPRequestHandler funktioniert nicht

Verfasst: Mittwoch 6. April 2011, 09:55
von lunar
@daemonTutorials: Nein, es ist nicht das gleiche. Wenn Du HTTP verarbeiten möchtest, dann musst Du eben auch die dazu passenden Klassen nutzen.

Re: CGIHTTPRequestHandler funktioniert nicht

Verfasst: Mittwoch 6. April 2011, 15:17
von daemonTutorials
@lunar: Okay, ich schreibe es mal um!
EDIT: Läuft!