infinite-slow-response.py (986B)
1 import time 2 3 4 def url_dir(request): 5 return u'/'.join(request.url_parts.path.split(u'/')[:-1]) + u'/' 6 7 8 def stash_write(request, key, value): 9 """Write to the stash, overwriting any previous value""" 10 request.server.stash.take(key, url_dir(request)) 11 request.server.stash.put(key, value, url_dir(request)) 12 13 14 def main(request, response): 15 stateKey = request.GET.first(b"stateKey", b"") 16 abortKey = request.GET.first(b"abortKey", b"") 17 18 if stateKey: 19 stash_write(request, stateKey, 'open') 20 21 response.headers.set(b"Content-type", b"text/plain") 22 response.write_status_headers() 23 24 # Writing an initial 2k so browsers realise it's there. *shrug* 25 response.writer.write(b"." * 2048) 26 27 while True: 28 if not response.writer.write(b"."): 29 break 30 if abortKey and request.server.stash.take(abortKey, url_dir(request)): 31 break 32 time.sleep(0.01) 33 34 if stateKey: 35 stash_write(request, stateKey, 'closed')