The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web.
BaseHTTPServer
.
We use two classes from this module, namely BaseHTTPRequestHandler
and HTTPServer
.
We also need to use os module to access file in your system.#!/usr/bin/env python
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import os
Next, write a custom class namely
KodeFunHTTPRequestHandler
that
implementBaseHTTPRequestHandler
. #Create custom HTTPRequestHandler class
class KodeFunHTTPRequestHandler(BaseHTTPRequestHandler):
In this tutorial, I just implement GET command from HTTP. To do that, we need to override
do_GET()
function.
Our objective is to request an HTML file from server using our client (explained int the next step). Script insidedo_GET()
function
is written to handle our objective.#handle GET command
def do_GET(self):
rootdir = 'c:/xampp/htdocs/' #file location
try:
if self.path.endswith('.html'):
f = open(rootdir + self.path) #open requested file
#send code 200 response
self.send_response(200)
#send header first
self.send_header('Content-type','text-html')
self.end_headers()
#send file content to client
self.wfile.write(f.read())
f.close()
return
except IOError:
self.send_error(404, 'file not found')
def run():
print('http server is starting...')
#ip and port of servr
#by default http server port is 80
server_address = ('127.0.0.1', 80)
httpd = HTTPServer(server_address, KodeFunHTTPRequestHandler)
print('http server is running...')
httpd.serve_forever()
if __name__ == '__main__':
run()
Save it and name it whatever you want (e.g, kodefun-httpserver.py). Here is the complete script of http server:
#!/usr/bin/env python
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import os
#Create custom HTTPRequestHandler class
class KodeFunHTTPRequestHandler(BaseHTTPRequestHandler):
#handle GET command
def do_GET(self):
rootdir = 'c:/xampp/htdocs/' #file location
try:
if self.path.endswith('.html'):
f = open(rootdir + self.path) #open requested file
#send code 200 response
self.send_response(200)
#send header first
self.send_header('Content-type','text-html')
self.end_headers()
#send file content to client
self.wfile.write(f.read())
f.close()
return
except IOError:
self.send_error(404, 'file not found')
def run():
print('http server is starting...')
#ip and port of servr
#by default http server port is 80
server_address = ('127.0.0.1', 80)
httpd = HTTPServer(server_address, KodeFunHTTPRequestHandler)
print('http server is running...')
httpd.serve_forever()
if __name__ == '__main__':
run()
Step #2: Write a simple HTTP client
#!/usr/bin/env python
import httplib
import sys
#get http server ip
http_server = sys.argv[1]
#create a connection
conn = httplib.HTTPConnection(http_server)
while 1:
cmd = raw_input('input command (ex. GET index.html): ')
cmd = cmd.split()
if cmd[0] == 'exit': #tipe exit to end it
break
#request command to server
conn.request(cmd[0], cmd[1])
#get response from server
rsp = conn.getresponse()
#print server response and data
print(rsp.status, rsp.reason)
data_received = rsp.read()
print(data_received)
conn.close()
Step #3: Test using GET command
python kodefun-httpserver.py
<head>
<title>Dummy HTML</title>
</head>
<body>
<h1>Kode Fun is Awesome</h1>
<h1>You're awesome</h1>
</body>
Next, we need to run the client, type following command to run the client:
python kodefun-httpclient.py 127.0.0.1
GET dummy.html