mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-30 03:14:22 +00:00
Change response spec format to code[:features]
Reason message is now specified as just another feature with the "m" mnemonic.
This commit is contained in:
parent
07560ffe30
commit
61f8992fbf
@ -586,7 +586,8 @@ class Reason(_Component):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def expr(klass):
|
def expr(klass):
|
||||||
e = Value.copy()
|
e = pp.Literal("m").suppress()
|
||||||
|
e = e + Value
|
||||||
return e.setParseAction(lambda x: klass(*x))
|
return e.setParseAction(lambda x: klass(*x))
|
||||||
|
|
||||||
def values(self, settings):
|
def values(self, settings):
|
||||||
@ -724,7 +725,8 @@ class Response(Message):
|
|||||||
InjectAt,
|
InjectAt,
|
||||||
ShortcutContentType,
|
ShortcutContentType,
|
||||||
ShortcutLocation,
|
ShortcutLocation,
|
||||||
Raw
|
Raw,
|
||||||
|
Reason
|
||||||
)
|
)
|
||||||
logattrs = ["code", "reason", "version", "body"]
|
logattrs = ["code", "reason", "version", "body"]
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -749,7 +751,6 @@ class Response(Message):
|
|||||||
resp = pp.And(
|
resp = pp.And(
|
||||||
[
|
[
|
||||||
Code.expr(),
|
Code.expr(),
|
||||||
pp.Optional(Reason.expr()),
|
|
||||||
pp.ZeroOrMore(Sep + atom)
|
pp.ZeroOrMore(Sep + atom)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@ -17,17 +17,10 @@
|
|||||||
<div class="tab-pane active" id="specifying_responses">
|
<div class="tab-pane active" id="specifying_responses">
|
||||||
<p>The general form of a response is as follows:</p>
|
<p>The general form of a response is as follows:</p>
|
||||||
|
|
||||||
<pre class="example">code[MESSAGE]:[colon-separated list of features]</pre></p>
|
<pre class="example">code:[colon-separated list of features]</pre></p>
|
||||||
|
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tbody >
|
<tbody >
|
||||||
<tr>
|
|
||||||
<td> h<a href="#valuespec">VALUE</a>=<a href="#valuespec">VALUE</a> </td>
|
|
||||||
<td>
|
|
||||||
Set a header.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td> b<a href="#valuespec">VALUE</a> </td>
|
<td> b<a href="#valuespec">VALUE</a> </td>
|
||||||
<td>
|
<td>
|
||||||
@ -44,6 +37,21 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td> d<a href="#offsetspec">OFFSET</a> </td>
|
||||||
|
<td>
|
||||||
|
Disconnect after OFFSET bytes.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td> h<a href="#valuespec">VALUE</a>=<a href="#valuespec">VALUE</a> </td>
|
||||||
|
<td>
|
||||||
|
Set a header.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td> i<a href="#offsetspec">OFFSET</a>,<a href="#valuespec">VALUE</a> </td>
|
<td> i<a href="#offsetspec">OFFSET</a>,<a href="#valuespec">VALUE</a> </td>
|
||||||
<td>
|
<td>
|
||||||
@ -60,9 +68,10 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td> d<a href="#offsetspec">OFFSET</a> </td>
|
<td> m<a href="#valuespec">VALUE</a> </td>
|
||||||
<td>
|
<td>
|
||||||
Disconnect after OFFSET bytes.
|
HTTP Reason message. Automatically chosen according to
|
||||||
|
the response code if not specified.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@ -94,13 +103,6 @@
|
|||||||
|
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tbody >
|
<tbody >
|
||||||
<tr>
|
|
||||||
<td> h<a href="#valuespec">VALUE</a>=<a href="#valuespec">VALUE</a> </td>
|
|
||||||
<td>
|
|
||||||
Set a header.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td> b<a href="#valuespec">VALUE</a> </td>
|
<td> b<a href="#valuespec">VALUE</a> </td>
|
||||||
<td>
|
<td>
|
||||||
@ -118,16 +120,23 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td> i<a href="#offsetspec">OFFSET</a>,<a href="#valuespec">VALUE</a> </td>
|
<td> d<a href="#offsetspec">OFFSET</a> </td>
|
||||||
<td>
|
<td>
|
||||||
Inject the specified value at the offset.
|
Disconnect after OFFSET bytes.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td> d<a href="#offsetspec">OFFSET</a> </td>
|
<td> h<a href="#valuespec">VALUE</a>=<a href="#valuespec">VALUE</a> </td>
|
||||||
<td>
|
<td>
|
||||||
Disconnect after OFFSET bytes.
|
Set a header.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td> i<a href="#offsetspec">OFFSET</a>,<a href="#valuespec">VALUE</a> </td>
|
||||||
|
<td>
|
||||||
|
Inject the specified value at the offset.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
name="spec"
|
name="spec"
|
||||||
class="input-medium search-query"
|
class="input-medium search-query"
|
||||||
value="{{spec}}"
|
value="{{spec}}"
|
||||||
placeholder="code[msg]:[features]"
|
placeholder="code:[features]"
|
||||||
>
|
>
|
||||||
<a id="gopublic" class="btn">go</a>
|
<a id="gopublic" class="btn">go</a>
|
||||||
</p>
|
</p>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
name="spec"
|
name="spec"
|
||||||
class="input-medium search-query"
|
class="input-medium search-query"
|
||||||
value="{{spec}}"
|
value="{{spec}}"
|
||||||
placeholder="code[msg]:[features]"
|
placeholder="code:[features]"
|
||||||
>
|
>
|
||||||
<input type="submit" class="btn" value="preview">
|
<input type="submit" class="btn" value="preview">
|
||||||
{% if not nocraft %}
|
{% if not nocraft %}
|
||||||
|
@ -498,11 +498,11 @@ class TestResponse:
|
|||||||
assert r.code.string() == "202"
|
assert r.code.string() == "202"
|
||||||
|
|
||||||
def test_response(self):
|
def test_response(self):
|
||||||
r = language.parse_response({}, "400'msg'")
|
r = language.parse_response({}, "400:m'msg'")
|
||||||
assert r.code.string() == "400"
|
assert r.code.string() == "400"
|
||||||
assert r.reason.string() == "msg"
|
assert r.reason.string() == "msg"
|
||||||
|
|
||||||
r = language.parse_response({}, "400'msg':b@100b")
|
r = language.parse_response({}, "400:m'msg':b@100b")
|
||||||
assert r.reason.string() == "msg"
|
assert r.reason.string() == "msg"
|
||||||
assert r.body.values({})
|
assert r.body.values({})
|
||||||
assert str(r)
|
assert str(r)
|
||||||
@ -514,7 +514,7 @@ class TestResponse:
|
|||||||
|
|
||||||
def test_render(self):
|
def test_render(self):
|
||||||
s = cStringIO.StringIO()
|
s = cStringIO.StringIO()
|
||||||
r = language.parse_response({}, "400'msg'")
|
r = language.parse_response({}, "400:m'msg'")
|
||||||
assert r.serve(s, {})
|
assert r.serve(s, {})
|
||||||
|
|
||||||
def test_raw(self):
|
def test_raw(self):
|
||||||
@ -537,9 +537,9 @@ class TestResponse:
|
|||||||
s = cStringIO.StringIO()
|
s = cStringIO.StringIO()
|
||||||
x.serve(s, {})
|
x.serve(s, {})
|
||||||
assert x.length({}, None) == len(s.getvalue())
|
assert x.length({}, None) == len(s.getvalue())
|
||||||
testlen(language.parse_response({}, "400'msg'"))
|
testlen(language.parse_response({}, "400:m'msg'"))
|
||||||
testlen(language.parse_response({}, "400'msg':h'foo'='bar'"))
|
testlen(language.parse_response({}, "400:m'msg':h'foo'='bar'"))
|
||||||
testlen(language.parse_response({}, "400'msg':h'foo'='bar':b@100b"))
|
testlen(language.parse_response({}, "400:m'msg':h'foo'='bar':b@100b"))
|
||||||
|
|
||||||
def test_maximum_length(self):
|
def test_maximum_length(self):
|
||||||
def testlen(x, actions):
|
def testlen(x, actions):
|
||||||
@ -548,7 +548,7 @@ class TestResponse:
|
|||||||
x.serve(s, {})
|
x.serve(s, {})
|
||||||
assert m >= len(s.getvalue())
|
assert m >= len(s.getvalue())
|
||||||
|
|
||||||
r = language.parse_response({}, "400'msg':b@100")
|
r = language.parse_response({}, "400:m'msg':b@100")
|
||||||
|
|
||||||
actions = [
|
actions = [
|
||||||
language.DisconnectAt(0)
|
language.DisconnectAt(0)
|
||||||
|
@ -40,7 +40,6 @@ class TestTimeout(tutils.DaemonTests):
|
|||||||
# FIXME: Add float values to spec language, reduce test timeout to
|
# FIXME: Add float values to spec language, reduce test timeout to
|
||||||
# increase test performance
|
# increase test performance
|
||||||
assert self.get("200:p1,1").status_code == 200
|
assert self.get("200:p1,1").status_code == 200
|
||||||
print self.d.last_log()
|
|
||||||
assert self.d.last_log()["type"] == "timeout"
|
assert self.d.last_log()["type"] == "timeout"
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user