Guest User

Untitled

a guest
Nov 18th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. #!/usr/bin/env python
  2. """An externally-accessible toy server whith several response strategies"""
  3.  
  4. import socket
  5. import sys
  6. from multiprocessing import Pool
  7.  
  8. def web_scrape(site):
  9. s = socket.socket()
  10. s.connect((site, 1333))
  11. s.send('GET / \r\n\r\n')
  12. response_characters = []
  13. while True:
  14. print 'starting loop'
  15. o = s.recv(1000)
  16. if not o:
  17. break
  18. response_characters.append(o)
  19. return "".join(response_characters)
  20.  
  21. def get_local_address_hack():
  22. s = socket.socket()
  23. s.connect(('google.com', 80))
  24. address, port = s.getsockname()
  25. return address
  26.  
  27. def long_running_request(client_socket):
  28. print 'calculating complicated response...'
  29. for x in xrange(10**8):
  30. pass
  31. print '...finished'
  32. s = client_socket.recv(1000)
  33. open('output.txt', 'a').write(s)
  34. # I'm confused about what makes a valid http response
  35. test_response = "HTTP/1.0 200 OK\r\n\r\n<html><body>This is a response!</body></html>"
  36. client_socket.send(test_response)
  37. client_socket.close()
  38.  
  39. class Server(object):
  40. def __init__(self, port=8000):
  41. self.address = get_local_address_hack()
  42. self.port = port
  43. self.socket = socket.socket()
  44. self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  45. self.socket.bind((self.address, self.port))
  46. print 'ip to hit:'
  47. print self.address,':', self.port
  48. self.socket.listen(1)
  49.  
  50. def blocking_listen(self, response_function):
  51. (client_socket, client_address) = self.socket.accept()
  52. print 'client connected at ', client_address, 'connected'
  53. response_function(client_socket)
  54.  
  55. def multiprocessing_listen(self, response_function, pool_size=3):
  56. """Takes a function(client_socket) to use for responses."""
  57.  
  58. self.pool = Pool(pool_size)
  59. print 'starting listen loop'
  60. while True:
  61. (client_socket, client_address) = self.socket.accept()
  62. print client_socket, 'at', client_address, 'connected'
  63. self.pool.apply_async(response_function, [client_socket])
  64.  
  65. if __name__ == '__main__':
  66. #print web_scrape('localhost')
  67. #raw_input('wait while setup server again')
  68. #s = '10.242.11.247'
  69. #print web_scrape(s)
  70. s = Server(8000)
  71. s.blocking_listen(long_running_request)
Add Comment
Please, Sign In to add comment