/silk/sock_http.py

https://bitbucket.org/btubbs/silk-deployment/ · Python · 41 lines · 30 code · 8 blank · 3 comment · 5 complexity · f297e1ac677cd74b72c777212d6abdd8 MD5 · raw file

  1. #!/usr/bin/env python
  2. import sys
  3. import socket
  4. REQUEST_TEMPLATE = ('%(method)s %(path)s HTTP/1.1\r\n'
  5. 'Host: %(host)s\r\n\r\n')
  6. SUPPORTED_METHODS = ('HEAD', 'GET')
  7. def sockhttp(sockpath, method, path, host):
  8. """Make an HTTP request over a unix socket."""
  9. req = REQUEST_TEMPLATE % locals()
  10. s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  11. s.connect(sockpath)
  12. s.send(req)
  13. out = ''
  14. while 1:
  15. data = s.recv(1024)
  16. out += data
  17. if not data: break
  18. s.close()
  19. return out
  20. def usage():
  21. """Print usage information for this program"""
  22. print ("This program allows you to make http requests to unix sockets. "
  23. "Usage:\n\n"
  24. "python %s /path/to/socket METHOD request_path host_name\n" %
  25. __file__)
  26. print "Supported methods are: %s" % ", ".join(SUPPORTED_METHODS)
  27. if __name__ == '__main__':
  28. try:
  29. _, sockpath, method, path, host = sys.argv
  30. except ValueError:
  31. usage()
  32. sys.exit(1)
  33. print sockhttp(sockpath, method, path, host)