diff --git a/scripts/httpserver.py b/scripts/httpserver.py
new file mode 100755
index 0000000..9dd33d8
--- /dev/null
+++ b/scripts/httpserver.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# Reflects the requests from HTTP methods GET, POST, PUT, and DELETE
+# Written by Nathan Hamiel (2010)
+
+from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
+from optparse import OptionParser
+
+class RequestHandler(BaseHTTPRequestHandler):
+    
+    def do_GET(self):
+        
+        request_path = self.path
+        
+        print("\n----- Request Start ----->\n")
+        print(request_path)
+        print(self.headers)
+        print("<----- Request End -----\n")
+        
+        self.send_response(200)
+        self.send_header("Set-Cookie", "foo=bar")
+        
+    def do_POST(self):
+        
+        request_path = self.path
+        
+        print("\n----- Request Start ----->\n")
+        print(request_path)
+        
+        request_headers = self.headers
+        content_length = request_headers.getheaders('content-length')
+        length = int(content_length[0]) if content_length else 0
+        
+        print(request_headers)
+        print(self.rfile.read(length))
+        print("<----- Request End -----\n")
+        
+        self.send_response(200)
+    
+    do_PUT = do_POST
+    do_DELETE = do_GET
+        
+def main():
+    port = 9997
+    print('Listening on localhost:%s' % port)
+    server = HTTPServer(('', port), RequestHandler)
+    server.serve_forever()
+
+        
+if __name__ == "__main__":
+    parser = OptionParser()
+    parser.usage = ("Creates an http-server that will echo out any GET or POST parameters\n"
+                    "Run:\n\n"
+                    "   reflect")
+    (options, args) = parser.parse_args()
+    
+    main()
\ No newline at end of file
