DownloadServer.py 1.5 KB

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