Continue from the last post, it's about simple HTTP server with Python. Today, I will explain more about create POST server with Python. From last time to response GET request, we need to override do_GET in class SimpleHTTPRequestHandler. Similarly, to response POST request, we just override do_POST method. However, to receive parameters from POST there are 2 popular formats: url-encode, and multipart as I described in my previous post.
In this post I will describe only url-encode. It's like encrypt the data in url format before sending to the server. So, your data will be like "{key1}={value1}&{key2}={value2} ...:". Basically, it's not that difficult with Python because all we need, are already had.
HTTP POST Client:
import urllib, urllib2
uri = 'http://localhost:8000'
name = "Mark"
# Encode data in base64 string
encode = name.encode('base64')
params = { 'name' : encode }
# Pack key-value pairs in form of url-encode format
data = urllib.urlencode(params)
# urlopen with data will use POST method by default
p = urllib2.urlopen(uri, data)
print p.read()
HTTP POST Server:
import SimpleHTTPServer
import SocketServer
import cgi
from base64 import decodestring
# Server port
PORT = 8000
class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_POST(self):
# Use cgi module to retrieve data from POST as a form
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
# We can get value from the form key like we did in dictionary class
encode = form['name'].value
# Decide the value from base64 string
decode = decodestring(encode)
self.wfile.write('Hello, ' + decode + '.')
Handler = ServerHandler
# Initialize server object
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
You will get the message "Hello, Mark." in return.
References:
References:








