web.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python
  2. '''
  3. A super simple HTTP/HTTPS webserver for python. Automatically detect
  4. You can make a cert/key with openssl using:
  5. openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
  6. as taken from http://docs.python.org/dev/library/ssl.html#certificates
  7. '''
  8. import traceback, sys
  9. import socket
  10. import ssl
  11. #import http.server as server # python 3.X
  12. import SimpleHTTPServer as server # python 2.X
  13. def do_request(connstream, from_addr):
  14. x = object()
  15. server.SimpleHTTPRequestHandler(connstream, from_addr, x)
  16. connstream.close()
  17. def serve():
  18. bindsocket = socket.socket()
  19. bindsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  20. #bindsocket.bind(('localhost', PORT))
  21. bindsocket.bind(('', PORT))
  22. bindsocket.listen(5)
  23. print("serving on port", PORT)
  24. while True:
  25. try:
  26. newsocket, from_addr = bindsocket.accept()
  27. peek = newsocket.recv(1024, socket.MSG_PEEK)
  28. if peek.startswith("\x16"):
  29. connstream = ssl.wrap_socket(
  30. newsocket,
  31. server_side=True,
  32. certfile='self.pem',
  33. ssl_version=ssl.PROTOCOL_TLSv1)
  34. else:
  35. connstream = newsocket
  36. do_request(connstream, from_addr)
  37. except Exception:
  38. traceback.print_exc()
  39. try:
  40. PORT = int(sys.argv[1])
  41. except:
  42. print "%s port" % sys.argv[0]
  43. sys.exit(2)
  44. serve()