diff --git a/python/tools/http_server.py b/python/tools/http_server.py
old mode 100644
new mode 100755
index 475d5958d4634b82fddc8235a837867bf3dd264e..3d450dcdc456c93d4101f82daae8a662b09c6cf5
--- a/python/tools/http_server.py
+++ b/python/tools/http_server.py
@@ -17,6 +17,7 @@
 
 from twisted.web import server, resource
 from twisted.internet import reactor, endpoints
+from urllib.parse import urlparse
 
 import opendht as dht
 import base64, json
@@ -25,14 +26,15 @@ class DhtServer(resource.Resource):
     isLeaf = True
     node = dht.DhtRunner()
 
-    def __init__(self):
-        self.node.run()
-        self.node.bootstrap("bootstrap.ring.cx", "4222")
+    def __init__(self, port, bootstrap):
+        self.node.run(port=port)
+        b_url = urlparse('//'+bootstrap)
+        self.node.bootstrap(b_url.hostname, str(b_url.port) if b_url.port else '4222')
 
     def render_GET(self, req):
         uri = req.uri[1:]
         h = dht.InfoHash(uri) if len(uri) == 40 else dht.InfoHash.get(uri.decode())
-        print('GET', h)
+        print('GET', '"'+uri.decode()+'"', h)
         res = self.node.get(h)
         req.setHeader(b"content-type", b"application/json")
         return json.dumps({'{:x}'.format(v.id):{'base64':base64.b64encode(v.data).decode()} for v in res}).encode()
@@ -52,5 +54,13 @@ class DhtServer(resource.Resource):
             req.setResponseCode(400)
             return json.dumps({'success':False, 'error':'no data parameter'}).encode()
 
-endpoints.serverFromString(reactor, "tcp:8080").listen(server.Site(DhtServer()))
-reactor.run()
+
+if __name__ == '__main__':
+    import argparse
+    parser = argparse.ArgumentParser(description='Launch an OpenDHT node with an HTTP control interface')
+    parser.add_argument('-p', '--port', help='OpenDHT port to bind', type=int, default=4222)
+    parser.add_argument('-hp', '--http-port', help='HTTP port to bind', type=int, default=8080)
+    parser.add_argument('-b', '--bootstrap', help='bootstrap address', default="bootstrap.ring.cx:4222")
+    args = parser.parse_args()
+    endpoints.serverFromString(reactor, "tcp:"+str(args.http_port)).listen(server.Site(DhtServer(args.port, args.bootstrap)))
+    reactor.run()