Skip to content

Instantly share code, notes, and snippets.

@velfundert
Last active September 22, 2016 11:26
Show Gist options
  • Save velfundert/de2bc60c67f7715f95481df5b1d910a7 to your computer and use it in GitHub Desktop.
Save velfundert/de2bc60c67f7715f95481df5b1d910a7 to your computer and use it in GitHub Desktop.
#!env python2
# -*- coding: utf8 -*-
import BaseHTTPServer
from sys import exit,stdout
from os import fork
from time import sleep
from socket import error as socketError
import random
XML_RESPONSE = u"""<?xml version="1.0" encoding="UTF-8"?>
<response>OK</response>
"""
def createMockServer(outputRequests):
class myMockServer(BaseHTTPServer.BaseHTTPRequestHandler):
verbose = outputRequests
def do_POST(self):
sleep(0.2)
self.send_response(200)
self.send_header("Content-Length", len(XML_RESPONSE))
self.send_header("Content-Type","text/xml; charset=UTF-8")
self.end_headers()
if self.verbose:
print "POST "+ self.path
print self.headers
length = int(self.headers["Content-Length"])
print self.rfile.read(length)
print "\n"
stdout.flush()
self.wfile.write(XML_RESPONSE)
self.wfile.close()
return myMockServer
def run(port, verbose, do_fork):
try:
httpd = BaseHTTPServer.HTTPServer(("", port), createMockServer(verbose))
print "Starting server @ port", port
if (do_fork):
pid = fork()
if (pid != 0):
print "[%d]" % pid
exit(0)
else:
print "Ctrl-C to stop"
httpd.serve_forever()
except KeyboardInterrupt:
print "Quitting..."
exit(0)
except socketError, e:
print "Could not bind to port %d:" % port,
print e
exit(1)
if __name__ == "__main__":
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-p","--port", dest="port", default=9001,
help="Bind to this port, default %default",
type=int)
parser.add_option("-v","--verbose", dest="verbose",
action="store_true", default=False,
help="Generate more output (print all requests)")
parser.add_option("-d","--daemonize", dest="fork",
action="store_true", default=False,
help="Fork to background (for initscripts etc.)")
(opts,args) = parser.parse_args()
run(opts.port, opts.verbose, opts.fork)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment