Mercurial > hg > RequestDumpster
annotate requestdumpster/dumpster.py @ 10:db2ab581cedb
works
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Wed, 16 Dec 2015 12:24:28 -0800 |
parents | eb260393caef |
children | d329dfdf6099 |
rev | line source |
---|---|
1 | 1 #!/usr/bin/env python |
2 | |
3 """ | |
4 dump HTTP requests | |
5 """ | |
6 | |
2 | 7 # imports |
7
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
8 import argparse |
3 | 9 import os |
2 | 10 import sys |
3 | 11 import time |
8
eb260393caef
this is about as far as I want to get without webob
Jeff Hammel <k0scist@gmail.com>
parents:
7
diff
changeset
|
12 from wsgiref import simple_server |
10 | 13 from webob import Request, Response |
1 | 14 |
5 | 15 # module globals |
16 __all__ = ['RequestDumpster'] | |
17 | |
1 | 18 class RequestDumpster(object): |
5 | 19 """WSGI interface to dump HTTP requests""" |
1 | 20 |
3 | 21 def __init__(self, directory=None): |
22 if directory is not None and not os.path.isdir(directory): | |
23 raise Exception("Not a directory") | |
24 self.directory = directory | |
25 | |
1 | 26 def __call__(self, environ, start_response): |
27 """WSGI""" | |
28 | |
10 | 29 request = Request(environ) |
30 lines = ["{REQUEST_METHOD} {PATH_INFO} {SERVER_PROTOCOL}".format(PATH_INFO=request.path_qs, | |
31 REQUEST_METHOD=request.method, | |
32 SERVER_PROTOCOL=request.environ['SERVER_PROTOCOL'])] | |
33 lines.extend(['{0}: {1}'.format(*header) | |
34 for header in request.headers.items()]) | |
35 lines.append('') | |
36 lines.append(request.body) | |
37 body = '\r\n'.join(lines) + '\r\n' | |
8
eb260393caef
this is about as far as I want to get without webob
Jeff Hammel <k0scist@gmail.com>
parents:
7
diff
changeset
|
38 |
10 | 39 response = Response(content_type='text/plain', |
40 body=body) | |
41 return response(environ, start_response) | |
5 | 42 |
1 | 43 def main(args=sys.argv[1:]): |
44 """CLI""" | |
45 | |
46 # parse command line arguments | |
7
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
47 parser = argparse.ArgumentParser(description=__doc__) |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
48 parser.add_argument('-p', '--port', dest='port', |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
49 type=int, default=9555, |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
50 help="port to serve on") |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
51 parser.add_argument('-d', '--directory', dest='directory', |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
52 help="directory to output requests to") |
1 | 53 options = parser.parse_args() |
54 | |
5 | 55 # instantiate WSGI app |
6 | 56 app = RequestDumpster(directory=options.directory) |
57 | |
1 | 58 # construct url |
59 url = 'http://localhost:{port}/'.format(port=options.port) | |
60 | |
6 | 61 # serve some web |
8
eb260393caef
this is about as far as I want to get without webob
Jeff Hammel <k0scist@gmail.com>
parents:
7
diff
changeset
|
62 host = '127.0.0.1' |
eb260393caef
this is about as far as I want to get without webob
Jeff Hammel <k0scist@gmail.com>
parents:
7
diff
changeset
|
63 server = simple_server.make_server(host=host, |
eb260393caef
this is about as far as I want to get without webob
Jeff Hammel <k0scist@gmail.com>
parents:
7
diff
changeset
|
64 port=options.port, |
eb260393caef
this is about as far as I want to get without webob
Jeff Hammel <k0scist@gmail.com>
parents:
7
diff
changeset
|
65 app=app) |
7
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
66 print url |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
67 try: |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
68 server.serve_forever() |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
69 except KeyboardInterrupt: |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
70 pass |
83c51f45b82d
optparse -> argparse and the like
Jeff Hammel <k0scist@gmail.com>
parents:
6
diff
changeset
|
71 |
6 | 72 |
1 | 73 if __name__ == '__main__': |
74 main() |