DownloadServer.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from http.server import HTTPServer, BaseHTTPRequestHandler
  2. import argparse
  3. import time
  4. import subprocess
  5. import sys
  6. import os
  7. import threading
  8. args = None
  9. outerthread = None
  10. class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
  11. def do_GET(self):
  12. self.send_response(200)
  13. self.end_headers()
  14. data = b'D'
  15. if args.speed_limit:
  16. slow_deadline = time.time()+args.limit_duration
  17. while time.time() < slow_deadline:
  18. self.wfile.write(data)
  19. if args.speed_limit:
  20. time.sleep(1.1)
  21. data = data * 100
  22. self.wfile.write(data)
  23. self.close_connection = True
  24. def runServer(fileName):
  25. httpd = HTTPServer(('localhost', 0), SimpleHTTPRequestHandler)
  26. with open(fileName,"w") as f:
  27. f.write('http://localhost:{}/test'.format(httpd.socket.getsockname()[1]))
  28. httpd.handle_request()
  29. os.remove(fileName)
  30. if __name__ == "__main__":
  31. parser = argparse.ArgumentParser()
  32. parser.add_argument('--speed_limit', help='transfer rate limitation', action='store_true',default=False)
  33. parser.add_argument('--limit_duration', help='duration of the transfer rate limitation',default=1, type=float)
  34. parser.add_argument('--file', help='file to write the url to connect to')
  35. parser.add_argument('--subprocess', action='store_true')
  36. args = parser.parse_args()
  37. if not args.subprocess:
  38. subprocess.Popen([sys.executable]+sys.argv+['--subprocess'],stdin=subprocess.DEVNULL, stderr=subprocess.DEVNULL,stdout=subprocess.DEVNULL)
  39. else:
  40. serverThread = threading.Thread(target=runServer,args=(args.file,))
  41. serverThread.daemon = True
  42. serverThread.start()
  43. serverThread.join(15)