import string, httplib, mimetools
thisport = 3333
otherport = 3334
def requestor_thread_function():
while 1:
num_series = raw_input("Please enter a series of numbers, separated by spaces: ")
num_list = string.split(num_series)
body = '<?xml version="1.0"?>\n<numbers-to-sum>\n'
for num in num_list:
body = body + "<number>" + num + "</number>\n"
body = body + "</numbers-to-sum>"
blen = len(body)
requestor = httplib.HTTP('127.0.0.1', otherport)
requestor.putrequest('POST', '/echo-request')
requestor.putheader('Host', '127.0.0.1')
requestor.putheader('Content-Type', 'text/plain; charset="iso-8859-1"')
requestor.putheader('Content-Length', str(blen))
requestor.endheaders()
requestor.send(body)
(status_code, message, reply_headers) = requestor.getreply()
reply_body = requestor.getfile().read()
print status_code
print message
print reply_body
import string, BaseHTTPServer
from xml.dom.ext.reader import PyExpat
reader = PyExpat.Reader()
class XmlSumHttpServer(BaseHTTPServer.BaseHTTPRequestHandler):
def do_POST(self):
clen = self.headers.getheader('content-length')
if clen:
clen = string.atoi(clen)
else:
print 'POST ERROR: missing content-length'
return
input_body = self.rfile.read(clen)
xmldoc = reader.fromString(input_body)
nums = xmldoc.getElementsByTagNameNS('', 'number')
total = 0
for num_elem in nums:
num_node = num_elem.firstChild
num_str = num_node.data
total = total + string.atof(num_str)
output_body = '<?xml version="1.0"?>\n<total>' + str(total) + '</total>'
olen = len(output_body)
self.send_response(200, 'OK')
self.send_header('Content-type', 'text/plain; charset=iso-8859-1')
self.send_header('Content-length', str(output_body))
self.end_headers()
self.wfile.write(output_body)
return
def listener_thread_function():
server_address = ('127.0.0.1', thisport)
httpd = BaseHTTPServer.HTTPServer(server_address, XmlSumHttpServer)
print "Listening on port", thisport
httpd.serve_forever()
from threading import Thread
listener_thread = Thread(None, listener_thread_function)
requestor_thread = Thread(None, requestor_thread_function)
listener_thread.start()
requestor_thread.start()