2012-06-28 23:53:59 +00:00
|
|
|
{% extends "frame.html" %}
|
|
|
|
{% block body %}
|
2012-07-20 11:19:58 +00:00
|
|
|
|
2012-06-23 23:14:54 +00:00
|
|
|
<div class="page-header">
|
|
|
|
<h1>
|
|
|
|
pathod
|
|
|
|
<small>A pathological web daemon.</small>
|
|
|
|
</h1>
|
|
|
|
</div>
|
|
|
|
|
2012-07-29 10:26:31 +00:00
|
|
|
<p>Pathod is a pathological HTTP daemon, designed to let you craft arbitrarily
|
|
|
|
malevolent HTTP responses. It lets you thoroughly exercise the failure modes of
|
|
|
|
HTTP clients by creatively violating the standards. HTTP responses are
|
|
|
|
specified using a <a href="/docs/language">small, terse language</a>, which
|
|
|
|
pathod shares with its evil twin pathoc. </p>
|
2012-06-23 22:54:37 +00:00
|
|
|
|
|
|
|
|
2012-07-29 10:26:31 +00:00
|
|
|
<section id="api">
|
|
|
|
<div class="page-header">
|
|
|
|
<h1>Getting started</h1>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<p> To start playing with pathod, simply fire up the daemon: </p>
|
|
|
|
|
|
|
|
<pre class="terminal">./pathod</pre>
|
|
|
|
|
|
|
|
<p>By default, the service listens on port 9999 of localhost. Pathod's
|
|
|
|
documentation is self-hosting, and the pathod daemon exposes an interface that
|
|
|
|
lets you play with the specifciation language, preview what responses and
|
|
|
|
requests would look like on the wire, and view internal logs. To access all of
|
|
|
|
this, just fire up your browser, and point it to the following URL:</p>
|
|
|
|
|
|
|
|
<pre class="example">http://localhost:9999</pre>
|
|
|
|
|
|
|
|
<p>The default crafting anchor point is the path <b>/p/</b>. Anything after
|
|
|
|
this URL prefix is treated as a response specifier. Hitting the following URL
|
|
|
|
will generate an HTTP 200 response with 100 bytes of random data:</p>
|
|
|
|
|
|
|
|
<pre class="example">http://localhost:9999/p/200:b@100</pre>
|
|
|
|
|
|
|
|
<p>See the <a href="/docs/language">language documentation</a> to get (much)
|
|
|
|
fancier. The pathod daemon also takes a number of configuration options. To
|
|
|
|
view those, use the command-line help:</p>
|
|
|
|
|
|
|
|
<pre class="terminal">./pathod --help</pre>
|
|
|
|
|
|
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
<section id="api">
|
|
|
|
<div class="page-header">
|
|
|
|
<h1>Anchors</h1>
|
|
|
|
</div>
|
|
|
|
|
2012-06-24 07:12:52 +00:00
|
|
|
You can also add anchors to the pathod server that serve a fixed response
|
2012-07-20 11:19:58 +00:00
|
|
|
whenever a matching URL is requested:</p>
|
2012-06-23 22:54:37 +00:00
|
|
|
|
2012-07-29 10:26:31 +00:00
|
|
|
<pre class="terminal">./pathod -a "/foo=200"</pre>
|
2012-06-23 22:54:37 +00:00
|
|
|
|
2012-07-20 11:19:58 +00:00
|
|
|
<p>Here, "/foo" a regex specifying the anchor path, and the part after the "=" is
|
|
|
|
a response specifier.</p>
|
2012-06-23 22:54:37 +00:00
|
|
|
|
2012-07-29 10:26:31 +00:00
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
<section id="files">
|
|
|
|
<div class="page-header">
|
|
|
|
<h1>File Access</h1>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<div class="page-header">
|
|
|
|
<h1>Internal Error Responses</h1>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<p>Pathod uses the non-standard 800 response code to indicate internal
|
|
|
|
errors, to distinguish them from crafted responses. For example, a request
|
|
|
|
to:</p>
|
|
|
|
|
|
|
|
<pre class="example">http://localhost:9999/p/foo</pre>
|
|
|
|
|
|
|
|
<p>... will return an 800 response because "foo" is not a valid page
|
|
|
|
specifier.</p>
|
|
|
|
|
|
|
|
</section>
|
2012-06-23 22:54:37 +00:00
|
|
|
|
|
|
|
|
2012-07-20 11:19:58 +00:00
|
|
|
<section id="api">
|
|
|
|
<div class="page-header">
|
|
|
|
<h1>API</h1>
|
|
|
|
</div>
|
2012-06-24 04:47:44 +00:00
|
|
|
|
2012-07-20 11:19:58 +00:00
|
|
|
<p>pathod exposes a simple API, intended to make it possible to drive and
|
|
|
|
inspect the daemon remotely for use in unit testing and the like. </p>
|
2012-06-24 04:47:44 +00:00
|
|
|
|
|
|
|
|
2012-07-20 11:19:58 +00:00
|
|
|
<table class="table table-bordered">
|
|
|
|
<tbody >
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
/api/clear_log
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
A POST to this URL clears the log buffer.
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
/api/info
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
Basic version and configuration info.
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
/api/log
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
Returns the current log buffer. At the moment the buffer size is 500 entries -
|
|
|
|
when the log grows larger than this, older entries are discarded. The returned
|
|
|
|
data is a JSON dictionary, with the form:
|
|
|
|
|
|
|
|
<pre>{ 'log': [ ENTRIES ] } </pre>
|
|
|
|
|
|
|
|
You can preview the JSON data returned for a log entry through the built-in web
|
|
|
|
interface.
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</section>
|
|
|
|
|
2012-06-28 23:53:59 +00:00
|
|
|
{% endblock %}
|