mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-27 10:26:23 +00:00
Expand examples for responses, remove dupes from pathod doc.
This commit is contained in:
parent
0b916ebbb1
commit
87306164a6
@ -32,97 +32,6 @@ various other goodies. Try it by visiting the server root:</p>
|
|||||||
<pre class="example">http://localhost:9999</pre>
|
<pre class="example">http://localhost:9999</pre>
|
||||||
|
|
||||||
|
|
||||||
<section id="specifying_responses">
|
|
||||||
|
|
||||||
<div class="page-header">
|
|
||||||
<h1>Specifying Responses</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>The general form of a response is as follows:
|
|
||||||
|
|
||||||
<pre class="example">code[MESSAGE]:[colon-separated list of features]</pre></p>
|
|
||||||
|
|
||||||
<p>Here's the simplest possible response specification, returning just an HTTP 200
|
|
||||||
OK message with no headers and no content:
|
|
||||||
|
|
||||||
<pre class="example">200</pre></p>
|
|
||||||
|
|
||||||
<p>We can embellish this a bit by specifying an optional custom HTTP response
|
|
||||||
message (if we don't, pathod automatically creates an appropriate one). By
|
|
||||||
default for a 200 response code the message is "OK", but we can change it like
|
|
||||||
this:</p>
|
|
||||||
|
|
||||||
<pre class="example">200"YAY"</pre>
|
|
||||||
|
|
||||||
<p>The quoted string here is an example of a <a href=/docs/language#valuespec>Value
|
|
||||||
Specifier</a>, a syntax that is used throughout the pathod response
|
|
||||||
specification language. In this case, the quotes mean we're specifying a
|
|
||||||
literal string, but there are many other fun things we can do. For example, we
|
|
||||||
can tell pathod to generate 100k of random ASCII letters instead:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:@100k,ascii_letters</pre>
|
|
||||||
|
|
||||||
<p>Full documentation on the value specification syntax can be found in the next
|
|
||||||
section.
|
|
||||||
|
|
||||||
Following the response code specifier is a colon-separated list of features.
|
|
||||||
For instance, this specifies a response with a body consisting of 1 megabyte of
|
|
||||||
random data:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m</pre>
|
|
||||||
|
|
||||||
<p>And this is the same response with an ETag header added:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:h"Etag"="foo"</pre>
|
|
||||||
|
|
||||||
<p>Both the header name and the header value are full value specifiers. Here's the
|
|
||||||
same response again, but with a 1k randomly generated header name:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:h@1k,ascii_letters="foo"</pre>
|
|
||||||
|
|
||||||
<p>A few specific headers have shortcuts, because they're used so often. The
|
|
||||||
shortcut for the content-type header is "c":</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:c"text/json"</pre>
|
|
||||||
|
|
||||||
<p>That's it for the basic response definition. Now we can start mucking with the
|
|
||||||
responses to break clients. One common hard-to-test circumstance is hangs or
|
|
||||||
slow responses. pathod has a pause operator that you can use to define
|
|
||||||
precisely when and how long the server should hang. Here, for instance, we hang
|
|
||||||
for 120 seconds after sending 50 bytes (counted from the first byte of the HTTP
|
|
||||||
response):</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:p50,120</pre>
|
|
||||||
|
|
||||||
<p>If that's not long enough, we can tell pathod to hang forever:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:pf,120</pre>
|
|
||||||
|
|
||||||
<p>Or to send all data, and then hang without disconnecting:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:pa,120</pre>
|
|
||||||
|
|
||||||
<p>We can also ask pathod to hang randomly:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:pr,10</pre>
|
|
||||||
|
|
||||||
<p>There is a similar mechanism for dropping connections mid-response. So, we can
|
|
||||||
tell pathod to disconnect after sending 50 bytes:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:d50</pre>
|
|
||||||
|
|
||||||
<p>Or randomly:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:dr</pre>
|
|
||||||
|
|
||||||
<p>All of these features can be combined. Here's a response that pauses twice,
|
|
||||||
once at 10 bytes and once at 20, then disconnects at 5000:</p>
|
|
||||||
|
|
||||||
<pre class="example">200:b@1m:p10,10:p20,10:d5000</pre>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section id="api">
|
<section id="api">
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h1>API</h1>
|
<h1>API</h1>
|
||||||
|
@ -10,34 +10,34 @@
|
|||||||
<input type="submit" class="btn" value="preview">
|
<input type="submit" class="btn" value="preview">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<a data-toggle="collapse" data-target="#requestexamples">more examples...</a>
|
<a data-toggle="collapse" data-target="#requestexamples">Don't know what to type?</a>
|
||||||
|
|
||||||
<div id="requestexamples" class="collapse">
|
<div id="requestexamples" class="collapse">
|
||||||
|
<p>Check out the <a href="/docs/language">complete language docs</a>. Here
|
||||||
|
are some examples to get you started:</p>
|
||||||
|
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tbody >
|
<tbody >
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/request_preview?spec=get:/">get:/</a></td>
|
<td><a href="/request_preview?spec=get:/">get:/</a></td>
|
||||||
<td>Get path /</td>
|
<td>Get path /</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
|
||||||
<tbody >
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/request_preview?spec=get:/:b@100">get:/:b@100</a></td>
|
<td><a href="/request_preview?spec=get:/:b@100">get:/:b@100</a></td>
|
||||||
<td>100 random bytes as the body</td>
|
<td>100 random bytes as the body</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
|
||||||
<tbody >
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href='/request_preview?spec=get:/:h"User-Agent"="';drop table browsers;"'>get:/:h"User-Agent"="';drop table browsers;"</a></td>
|
<td><a href='/request_preview?spec=get:/:h"User-Agent"="';drop table browsers;"'>get:/:h"User-Agent"="';drop table browsers;"</a></td>
|
||||||
<td>Add a User-Agent header</td>
|
<td>Add a User-Agent header</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/request_preview?spec=get:/:b@100:dr">get:/:b@100:dr</a></td>
|
<td><a href="/request_preview?spec=get:/:b@100:dr">get:/:b@100:dr</a></td>
|
||||||
<td>Drop the connection randomly</td>
|
<td>Drop the connection randomly</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
<tr>
|
||||||
<tbody>
|
<td><a href="/request_preview?spec="></a></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/request_preview?spec=get:/:b@100,ascii:ir,@1">get:/:b@100,ascii:ir,@1</a></td>
|
<td><a href="/request_preview?spec=get:/:b@100,ascii:ir,@1">get:/:b@100,ascii:ir,@1</a></td>
|
||||||
<td>100 ASCII bytes as the body, and randomly inject a random byte</td>
|
<td>100 ASCII bytes as the body, and randomly inject a random byte</td>
|
||||||
|
@ -13,38 +13,51 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<a data-toggle="collapse" data-target="#responseexamples">more examples...</a>
|
<a data-toggle="collapse" data-target="#responseexamples">Don't know what to type?</a>
|
||||||
<div id="responseexamples" class="collapse">
|
<div id="responseexamples" class="collapse">
|
||||||
|
<p>Check out the <a href="/docs/language">complete language docs</a>. Here
|
||||||
|
are some examples to get you started:</p>
|
||||||
|
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tbody >
|
<tbody >
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/response_preview?spec=200">200</a></td>
|
<td><a href="/response_preview?spec=200">200</a></td>
|
||||||
<td>A basic HTTP 200 response</td>
|
<td>A basic HTTP 200 response</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
|
||||||
<tbody >
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/response_preview?spec=200:b@100">200:b@100</a></td>
|
<td><a href="/response_preview?spec=200:b@100">200:b@100</a></td>
|
||||||
<td>100 random bytes as the body</td>
|
<td>100 random bytes as the body</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
|
||||||
<tbody >
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href='/response_preview?spec=200:b@100:h"Server"="';drop table servers;"'>200:b@100:h"Etag"="';drop table servers;"</a></td>
|
<td><a href='/response_preview?spec=200:b@100:h"Server"="';drop table servers;"'>200:b@100:h"Etag"="';drop table servers;"</a></td>
|
||||||
<td>Add a Server header</td>
|
<td>Add a Server header</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/response_preview?spec=200:b@100:dr">200:b@100:dr</a></td>
|
<td><a href="/response_preview?spec=200:b@100:dr">200:b@100:dr</a></td>
|
||||||
<td>Drop the connection randomly</td>
|
<td>Drop the connection randomly</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/response_preview?spec=200:b@100,ascii:ir,@1">200:b@100,ascii:ir,@1</a></td>
|
<td><a href="/response_preview?spec=200:b@100,ascii:ir,@1">200:b@100,ascii:ir,@1</a></td>
|
||||||
<td>100 ASCII bytes as the body, and randomly inject a random byte</td>
|
<td>100 ASCII bytes as the body, and randomly inject a random byte</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href='/response_preview?spec=200:b@1k:c"text/json"'>200:b@1k:c"text/json"</a></td>
|
||||||
|
<td>1k of random bytes, with a text/json content type</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href='/response_preview?spec=200:b@1k:p50,120'>200:b@1k:p50,120</a></td>
|
||||||
|
<td>1k of random bytes, pause for 120 seconds after 50 bytes</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href='/response_preview?spec=200:b@1k:pr,f'>200:b@1k:pr,f</a></td>
|
||||||
|
<td>1k of random bytes, but hang forever at a random location</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="/response_preview?spec=200:b@100:h@1k,ascii_letters='foo'">200:b@100:h@1k,ascii_letters='foo'</a>
|
||||||
|
</td>
|
||||||
|
<td>100 ASCII bytes as the body, randomly generated 100k header name, with the value 'foo'.</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user