954,541 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Web Server code not working

Hi,

I'm trying to build a web server in Python, and here is what I have so far:

Code:
from http.server import HTTPServer, BaseHTTPRequestHandler

class RequestHandler(BaseHTTPRequestHandler):
    def _writeheaders(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_HEAD(self):
        self._writeheaders()

    def do_GET(self):
        self._writeheaders()
        self.wfile.write("""<HTML>
<HEAD><TITLE>Sample title</TITLE></HEAD>
<BODY>sample text</BODY>
</HTML>""")

serveraddr = ('', 8080)
srvr = HTTPServer(serveraddr, RequestHandler)
srvr.serve_forever()


I do not get any errors, however when it runs the shell opens and nothing happens.
What changes to this code would I do to make it work?

Thanks.

sciguy77
Newbie Poster
12 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

I'm not that familiar with webservers in python but isn't it normal that the server just keeps running in the shell? You should probably use something else to see the servers output? Like a web browser or something?

mathijs
Light Poster
41 posts since Oct 2007
Reputation Points: 10
Solved Threads: 2
 

I put a print statement at the end to make sure that the whole script was executed. It was not.

sciguy77
Newbie Poster
12 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 
I put a print statement at the end to make sure that the whole script was executed. It was not.


Did you put a print statement after serve_forever() ? I'm pretty sure that forever indicates a super loop (ie, while True: )

jlm699
Veteran Poster
1,112 posts since Jul 2008
Reputation Points: 355
Solved Threads: 292
 

Thanks. Apparently, the code finishes. Whoopse on my part, I usually don't miss those kinds of things. :)

So, my question is, now what? Once I have my server running, how do I access it and make it secure?

Any help on accessing it and making it more secure would be very helpful.

Thanks.

sciguy77
Newbie Poster
12 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

i think this line
serveraddr = ('', 8080)
binds the server to your localhost at port 8080
so you could try typing localhost:8080 at your webserver

mathijs
Light Poster
41 posts since Oct 2007
Reputation Points: 10
Solved Threads: 2
 

What about accessing it remotely from a different computer?

sciguy77
Newbie Poster
12 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 
What about accessing it remotely from a different computer?


Same as above but instead of localhost use the ip address of the computer where the server is running.

jlm699
Veteran Poster
1,112 posts since Jul 2008
Reputation Points: 355
Solved Threads: 292
 

Thanks. When I run it and go to it via localhost in my browser (Safari) I get this in the Shell and I get a blank browser page:

localhost - - [11/Jun/2009 16:55:55] "GET / HTTP/1.1" 200 -
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 54107)
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.0/lib/python3.0/socketserver.py", line 281, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/Library/Frameworks/Python.framework/Versions/3.0/lib/python3.0/socketserver.py", line 307, in process_request
    self.finish_request(request, client_address)
  File "/Library/Frameworks/Python.framework/Versions/3.0/lib/python3.0/socketserver.py", line 320, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/Library/Frameworks/Python.framework/Versions/3.0/lib/python3.0/socketserver.py", line 614, in __init__
    self.handle()
  File "/Library/Frameworks/Python.framework/Versions/3.0/lib/python3.0/http/server.py", line 363, in handle
    self.handle_one_request()
  File "/Library/Frameworks/Python.framework/Versions/3.0/lib/python3.0/http/server.py", line 357, in handle_one_request
    method()
  File "/Users/brennonwilliams/Documents/basichttp.py", line 19, in do_GET
    </HTML>""")
  File "/Library/Frameworks/Python.framework/Versions/3.0/lib/python3.0/socket.py", line 219, in write
    return self._sock.send(b)
TypeError: send() argument 1 must be bytes or buffer, not str
----------------------------------------
sciguy77
Newbie Poster
12 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

Why don't you try sending something simpler... this is an example i found from googling:

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()
        self.wfile.write("Hello World!")
jlm699
Veteran Poster
1,112 posts since Jul 2008
Reputation Points: 355
Solved Threads: 292
 

That's strange. I just tried your code out and it worked with no problem. The only change I made was for the imports since I'm running it with py2.5

Here's what I ran:

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class RequestHandler(BaseHTTPRequestHandler):
    def _writeheaders(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_HEAD(self):
        self._writeheaders()

    def do_GET(self):
        self._writeheaders()
        self.wfile.write("""<HTML>
<HEAD><TITLE>Sample title</TITLE></HEAD>
<BODY>sample text</BODY>
</HTML>""")

serveraddr = ('', 8080)
srvr = HTTPServer(serveraddr, RequestHandler)
srvr.serve_forever()


Then going to localhost:8080 in my browser resulted in a page with sample text

jlm699
Veteran Poster
1,112 posts since Jul 2008
Reputation Points: 355
Solved Threads: 292
 

Dang, my computer is crazy. I always end up with weird errors on Python that on one else seems to get.

Thanks for the help. :)

sciguy77
Newbie Poster
12 posts since Jun 2009
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You