views:

536

answers:

3

Hello,

I had found written in python, a very simple http server, it's do_get method looks like this:

def do_GET(self):
        try:
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers();
            filepath = self.path
            print filepath, USTAW['rootwww']

            f = file("./www" + filepath)
            s = f.readline();
            while s != "":
                self.wfile.write(s);
                s = f.readline();
            return

        except IOError:
            self.send_error(404,'File Not Found: %s ' % filepath)

It works ok, besides the fact - that it is not serving any css files ( it is rendered without css). Anyone got a suggestion / solution for this quirk?

Best regards, praavDa

+7  A: 

You're explicitly serving all files as Content-type: text/html, where you need to serve CSS files as Content-type: text/css. See this page on the CSS-Discuss Wiki for details. Web servers usually have a lookup table to map from file extension to Content-Type.

RichieHindle
In python the module mimetypes has the lookup table
Kathy Van Stone
+3  A: 

it seems to be returning the html mimetype for all files:

self.send_header('Content-type', 'text/html')

Also, it seems to be pretty bad. Why are you interested in this sucky server? Look at cherrypy or paste for good python implementations of HTTP server and a good code to study.


EDIT: Trying to fix it for you:

import os
import mimetypes

#...

    def do_GET(self):
        try:

            filepath = self.path
            print filepath, USTAW['rootwww']

            f = open(os.path.join('.', 'www', filepath))

        except IOError:
            self.send_error(404,'File Not Found: %s ' % filepath)

        else:
            self.send_response(200)
            mimetype, _ = mimetypes.guess_type(filepath)
            self.send_header('Content-type', mimetype)
            self.end_headers()
            for s in f:
                self.wfile.write(s)
nosklo
I am using this sucky one, because it is the topic of my project - I need to write http server in python. Thanks for the response.
praavDa
+1  A: 

See SimpleHTTPServer.py in the standard library for a safer, saner implementation that you can customize if you need.

Miles
Thank You for this link - I now know a little more about how I can write my own.
praavDa