mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 18:18:25 +00:00
Stub out new output argument structure.
This commit is contained in:
parent
0dd250d4f8
commit
0a5d4fbbbb
@ -35,22 +35,29 @@ class Pathoc(tcp.TCPClient):
|
||||
self.wfile.flush()
|
||||
return http.read_response(self.rfile, r.method, None)
|
||||
|
||||
def print_requests(self, reqs, respdump, reqdump, fp=sys.stdout):
|
||||
def print_requests(self, reqs, showreq, showresp, explain, hexdump, fp=sys.stdout):
|
||||
"""
|
||||
Performs a series of requests, and prints results to the specified
|
||||
file pointer.
|
||||
file descriptor.
|
||||
|
||||
reqs: A sequence of request specifications
|
||||
showreq: Print requests
|
||||
showresp: Print responses
|
||||
explain: Print request explanation
|
||||
hexdump: When printing requests or responses, use hex dump output
|
||||
"""
|
||||
for i in reqs:
|
||||
try:
|
||||
r = rparse.parse_request(self.settings, i)
|
||||
req = r.serve(self.wfile, None, self.host)
|
||||
if reqdump:
|
||||
print >> fp, "\n>>", req["method"], repr(req["path"])
|
||||
if explain:
|
||||
print >> fp, ">>", req["method"], repr(req["path"])
|
||||
for a in req["actions"]:
|
||||
print >> fp, "\t",
|
||||
for x in a:
|
||||
print >> fp, x,
|
||||
print >> fp
|
||||
print req
|
||||
self.wfile.flush()
|
||||
resp = http.read_response(self.rfile, r.method, None)
|
||||
except rparse.ParseException, v:
|
||||
@ -61,7 +68,7 @@ class Pathoc(tcp.TCPClient):
|
||||
print >> fp, "File access error: %s"%v
|
||||
return
|
||||
except http.HttpError, v:
|
||||
print >> fp, "<<", v.msg
|
||||
print >> fp, "<< HTTP Error:", v.msg
|
||||
return
|
||||
except tcp.NetLibTimeout:
|
||||
print >> fp, "<<", "Timeout"
|
||||
@ -70,7 +77,7 @@ class Pathoc(tcp.TCPClient):
|
||||
print >> fp, "<<", "Disconnect"
|
||||
return
|
||||
else:
|
||||
if respdump:
|
||||
if showresp:
|
||||
print_full(fp, *resp)
|
||||
else:
|
||||
print_short(fp, *resp)
|
||||
|
33
pathoc
33
pathoc
@ -17,10 +17,6 @@ if __name__ == "__main__":
|
||||
"-p", dest="port", type=int, default=None,
|
||||
help="Port. Defaults to 80, or 443 if SSL is active."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-d", dest="reqdump", action="store_true", default=False,
|
||||
help="Print request record before each response."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-s", dest="ssl", action="store_true", default=False,
|
||||
help="Connect with SSL."
|
||||
@ -29,10 +25,6 @@ if __name__ == "__main__":
|
||||
"-t", dest="timeout", type=int, default=None,
|
||||
help="Connection timeout."
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v", dest="verbose", action='count',
|
||||
help="Increase verbosity."
|
||||
)
|
||||
parser.add_argument(
|
||||
'host', type=str,
|
||||
help='Host to connect to'
|
||||
@ -41,6 +33,23 @@ if __name__ == "__main__":
|
||||
'request', type=str, nargs="+",
|
||||
help='Request specification'
|
||||
)
|
||||
group = parser.add_argument_group('Controlling Output')
|
||||
group.add_argument(
|
||||
"-e", dest="explain", action="store_true", default=False,
|
||||
help="Explain requests."
|
||||
)
|
||||
group.add_argument(
|
||||
"-q", dest="showreq", action="store_true", default=False,
|
||||
help="Print full request."
|
||||
)
|
||||
group.add_argument(
|
||||
"-r", dest="showresp", action="store_true", default=False,
|
||||
help="Print full response."
|
||||
)
|
||||
group.add_argument(
|
||||
"-x", dest="hexdump", action="store_true", default=False,
|
||||
help="Output in hexdump format."
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@ -65,7 +74,13 @@ if __name__ == "__main__":
|
||||
continue
|
||||
if args.timeout:
|
||||
p.settimeout(args.timeout)
|
||||
p.print_requests(args.request, args.verbose, args.reqdump)
|
||||
p.print_requests(
|
||||
args.request,
|
||||
showreq=args.showreq,
|
||||
showresp=args.showresp,
|
||||
explain=args.explain,
|
||||
hexdump=args.hexdump,
|
||||
)
|
||||
sys.stdout.flush()
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
@ -31,21 +31,28 @@ class TestDaemon:
|
||||
|
||||
s = cStringIO.StringIO()
|
||||
c.print_requests(
|
||||
["get:'/p/200:p0,10'"], True, True, s
|
||||
["get:'/p/200:p0,10'"], True, True, True, True, s
|
||||
)
|
||||
assert "Timeout" in s.getvalue()
|
||||
|
||||
def tval(self, requests, verbose=False):
|
||||
def tval(self, requests, showreq=False, showresp=False, explain=False, hexdump=False):
|
||||
c = pathoc.Pathoc("127.0.0.1", self.d.port)
|
||||
c.connect()
|
||||
s = cStringIO.StringIO()
|
||||
c.print_requests(requests, verbose, True, s)
|
||||
c.print_requests(
|
||||
requests,
|
||||
showreq = showreq,
|
||||
showresp = showresp,
|
||||
explain = explain,
|
||||
hexdump = hexdump,
|
||||
fp = s
|
||||
)
|
||||
return s.getvalue()
|
||||
|
||||
def test_print_requests(self):
|
||||
reqs = [ "get:/api/info:p0,0", "get:/api/info:p0,0" ]
|
||||
assert self.tval(reqs, False).count("200") == 2
|
||||
assert self.tval(reqs, True).count("Date") == 2
|
||||
assert self.tval(reqs).count("200") == 2
|
||||
assert self.tval(reqs, showresp=True).count("Date") == 2
|
||||
|
||||
def test_parse_err(self):
|
||||
assert "Error parsing" in self.tval(["foo"])
|
||||
@ -53,8 +60,12 @@ class TestDaemon:
|
||||
def test_conn_err(self):
|
||||
assert "Invalid server response" in self.tval(["get:'/p/200:d2'"])
|
||||
|
||||
def test_explain(self):
|
||||
reqs = [ "get:/api/info:ir,'x'"]
|
||||
assert "inject" in self.tval(reqs, explain=True)
|
||||
|
||||
def test_fileread(self):
|
||||
d = tutils.test_data.path("data/request")
|
||||
assert "foo" in self.tval(["+%s"%d])
|
||||
assert "foo" in self.tval(["+%s"%d], explain=True)
|
||||
assert "File" in self.tval(["+/nonexistent"])
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user