small python cgi webserver

  • Thread starter Fabian Braennstroem
  • Start date
F

Fabian Braennstroem

Hi,

I am looking for a small python script, which starts a small
web server with python cgi support on a linux machine.

I tried:


#!/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=["/home/fab/Desktop/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()

but when I want to test a small python cgi test file:


#!/usr/bin/python
# -*- coding: UTF-8 -*-

# Debugging für CGI-Skripte 'einschalten'
import cgitb; cgitb.enable()

print "Content-Type: text/html;charset=utf-8\n"
print "Hello World!"

I just get the text and not the html output. The file's mode
is 755.

Is there anything wrong with the webserver script or do I do
something completely wrong? Maybe, you have a different
webserver script?

Greetings!
Fabian
 
A

ArdPy

Fabian said:
Hi,

I am looking for a small python script, which starts a small
web server with python cgi support on a linux machine.

I tried:


#!/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=["/home/fab/Desktop/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()

but when I want to test a small python cgi test file:


#!/usr/bin/python
# -*- coding: UTF-8 -*-

# Debugging für CGI-Skripte 'einschalten'
import cgitb; cgitb.enable()

print "Content-Type: text/html;charset=utf-8\n"
print "Hello World!"

I just get the text and not the html output. The file's mode
is 755.

Is there anything wrong with the webserver script or do I do
something completely wrong? Maybe, you have a different
webserver script?

Greetings!
Fabian

Probably the server is not executing your CGI script. If it is the
Apache web server that you are using then just ensure the following
settings in your /etc/httpd/conf/httpd.conf file is exactly like
following:

<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
 
F

Fabian Braennstroem

Hi,

* ArdPy said:
Fabian said:
Hi,

I am looking for a small python script, which starts a small
web server with python cgi support on a linux machine.

I tried:


#!/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=["/home/fab/Desktop/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()

but when I want to test a small python cgi test file:


#!/usr/bin/python
# -*- coding: UTF-8 -*-

# Debugging für CGI-Skripte 'einschalten'
import cgitb; cgitb.enable()

print "Content-Type: text/html;charset=utf-8\n"
print "Hello World!"

I just get the text and not the html output. The file's mode
is 755.

Is there anything wrong with the webserver script or do I do
something completely wrong? Maybe, you have a different
webserver script?

Greetings!
Fabian

Probably the server is not executing your CGI script. If it is the
Apache web server that you are using then just ensure the following
settings in your /etc/httpd/conf/httpd.conf file is exactly like
following:

<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

Maybe, I understood something wrong, but I thought that the
above 'webserver' script would replace apache in my case; at
least I hoped!?

Greetings!
Fabian
 
N

Norbert Kaufmann

Fabian Braennstroem wrote:
[...]
Maybe, I understood something wrong, but I thought that the
above 'webserver' script would replace apache in my case; at
least I hoped!?

It does. The 'ServerRoot' and 'DocumentRoot' directories are the
directories you are starting your webserver in.
Create a 'cgi' directory inside this and consider that you have to name
it in the serverscript in relation to the serverroot!

<quote>
cgi_directories=["/home/fab/Desktop/cgi-bin"]
</quote>

This means you have to start your server inside directory '/'.

If you start your server in your home dir '/home/fab' then you have to
name your cgi_directories ['/Desktop/cgi-bin'].

In your response (cgi-script) you have to divide the header from the
content '\r\n\r\n'.

HTH

Norbert
 
A

ArdPy

Fabian said:
Hi,

* ArdPy said:
Fabian said:
Hi,

I am looking for a small python script, which starts a small
web server with python cgi support on a linux machine.

I tried:


#!/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=["/home/fab/Desktop/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()

but when I want to test a small python cgi test file:


#!/usr/bin/python
# -*- coding: UTF-8 -*-

# Debugging für CGI-Skripte 'einschalten'
import cgitb; cgitb.enable()

print "Content-Type: text/html;charset=utf-8\n"
print "Hello World!"

I just get the text and not the html output. The file's mode
is 755.

Is there anything wrong with the webserver script or do I do
something completely wrong? Maybe, you have a different
webserver script?

Greetings!
Fabian

Probably the server is not executing your CGI script. If it is the
Apache web server that you are using then just ensure the following
settings in your /etc/httpd/conf/httpd.conf file is exactly like
following:

<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

Maybe, I understood something wrong, but I thought that the
above 'webserver' script would replace apache in my case; at
least I hoped!?

Greetings!
Fabian

Oh yes...Your script is supposed to replace apache. I tried with your
script on my pc and its working just fine. However the problem still is
that the server is taking your file to be a plain file rather than a
CGI script. Looking at CGIHTTPServer.is_cgi method might prove helpful.
 
F

Fabian Braennstroem

Hi Norbert,

* Norbert Kaufmann said:
Fabian Braennstroem wrote:
[...]
Maybe, I understood something wrong, but I thought that the
above 'webserver' script would replace apache in my case; at
least I hoped!?

It does. The 'ServerRoot' and 'DocumentRoot' directories are the
directories you are starting your webserver in.
Create a 'cgi' directory inside this and consider that you have to name
it in the serverscript in relation to the serverroot!

<quote>
cgi_directories=["/home/fab/Desktop/cgi-bin"]
</quote>

This means you have to start your server inside directory '/'.

I tried this, but it does not help ... a wait, the leading
'/' is the problem. Thanks!
If you start your server in your home dir '/home/fab' then you have to
name your cgi_directories ['/Desktop/cgi-bin'].

In your response (cgi-script) you have to divide the header from the
content '\r\n\r\n'.

I am not sure, what that means!? ... but it works :)

Greetings!
Fabian
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top