Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
oorrja
GitHub Repository: oorrja/learntosolveit
Path: blob/master/languages/python/asyncio_examples/simple_server.py
1240 views
1
"""
2
Simple HTTP Server with GET that waits for given seconds.
3
"""
4
5
from http.server import BaseHTTPRequestHandler, HTTPServer
6
from socketserver import ThreadingMixIn
7
import time
8
9
ENCODING = 'utf-8'
10
11
12
class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
13
"""Simple multi-threaded HTTP Server."""
14
pass
15
16
17
class MyRequestHandler(BaseHTTPRequestHandler):
18
"""Very simple request handler. Only supports GET."""
19
20
def do_GET(self):
21
"""Respond after seconds given in path.
22
"""
23
try:
24
seconds = float(self.path[1:])
25
except ValueError:
26
seconds = 0.0
27
28
if seconds < 0:
29
seconds = 0.0
30
31
text = "Waited for {:4.2f} seconds.\nThat's all.\n"
32
msg = text.format(seconds).encode(ENCODING)
33
time.sleep(seconds)
34
35
self.send_response(200)
36
self.send_header("Content-type", "text/plain; charset=utf-8")
37
self.send_header("Content-length", str(len(msg)))
38
self.end_headers()
39
self.wfile.write(msg)
40
41
42
def run(server_class=ThreadingHTTPServer,
43
handler_class=MyRequestHandler,
44
port=8888):
45
"""Run the simple server on a given port."""
46
server_address = ('', port)
47
httpd = server_class(server_address, handler_class)
48
print(("Serving from port {}...".format(port)))
49
httpd.serve_forever()
50
51
52
if __name__ == '__main__':
53
run()
54
55