mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-23 16:17:49 +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>
|
||||
|
||||
|
||||
<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">
|
||||
<div class="page-header">
|
||||
<h1>API</h1>
|
||||
|
@ -10,34 +10,34 @@
|
||||
<input type="submit" class="btn" value="preview">
|
||||
</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">
|
||||
<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">
|
||||
<tbody >
|
||||
<tr>
|
||||
<td><a href="/request_preview?spec=get:/">get:/</a></td>
|
||||
<td>Get path /</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody >
|
||||
<tr>
|
||||
<td><a href="/request_preview?spec=get:/:b@100">get:/:b@100</a></td>
|
||||
<td>100 random bytes as the body</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody >
|
||||
<tr>
|
||||
<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>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="/request_preview?spec=get:/:b@100:dr">get:/:b@100:dr</a></td>
|
||||
<td>Drop the connection randomly</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="/request_preview?spec="></a></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<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>
|
||||
|
@ -13,38 +13,51 @@
|
||||
{% endif %}
|
||||
</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">
|
||||
<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">
|
||||
<tbody >
|
||||
<tr>
|
||||
<td><a href="/response_preview?spec=200">200</a></td>
|
||||
<td>A basic HTTP 200 response</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody >
|
||||
<tr>
|
||||
<td><a href="/response_preview?spec=200:b@100">200:b@100</a></td>
|
||||
<td>100 random bytes as the body</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody >
|
||||
<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>Add a Server header</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="/response_preview?spec=200:b@100:dr">200:b@100:dr</a></td>
|
||||
<td>Drop the connection randomly</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<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>
|
||||
</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>
|
||||
</table>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user