Post Test Server V2

How it works

1) Create your toilet

On the homepage is a search box. This lets you search for a toilet. A toilet is the vessel for receiving and exploring your dumps. Search for a string that you can remember and is unique to you and you will either be dropped off at an empty toilet, or somebody else's toilet who came up with your unique string first. Once you have your toilet, you can show the configuration options (described below), see the URL to submit dumps to, and explore any dumps you already have.

2) Submit your dumps to the URL

The toilet page will show you your submit URL. (the toilet URL with /post appended). Point your client at this and submit away. You can also just go to this URL in a browser to test configuration or see for yourself that it works and it's your client that is broken. :)

3) Review your dumps

The Toilet page will show dumps as they come in (after you reload it). You can click into any dump to see the values, the content of files, etc. You can also view your dumps as JSON or text blobs (useful for programatic access).

Configuration Options

On the toilet page there is an option to show configuration. This lets you update the following values:


This sets up basic HTTP auth so incoming posts must properly validate to be saved. This is helpful for testing that your client is handling Auth properly. These values are both stored and transmitted in plain text. So don't use sensitive strings here.

Status Code

This is the HTTP status code the server responds to the request with. 200 is the default, 202 is another common value. You can use this to testing situations like receiving a 500, or a 404.


This is the body of the response. You can test different responses. Paste a JSON string if that's what your client should expect from the server. Try pasting different possible error messages. There are also 3 hardcoded strings which cause special behavior. To use these, replace the body with any of these strings (with no whitespace):

  1. {{LINK}} - Returns an HTML link for the dump.
  2. {{URL-TEXT}} - Returns an HTTP URL to the text version of this dump.
  3. {{URL-JSON}} - Returns an HTTP URL to the JSON version of this dump.


This causes the server to sleep the specified seconds before returning a result. Useful for testing some timeout and race condition stuff. Unfortunately I can't sleep indefinitely because threads create cost so the max value for delay is 5.
*This is currently broken because AppEngine understandably doesn't like to wait around being useless. Will fix!

Dump Body First

This causes the server to get the contents of the post body before parsing the form. Because this is a stream, it means any post parameters stored in the post body will not appear as normal parameters. This probably also breaks multipart parsing as well.


Because of cost or because people are mean I have to impose the following limits. This service is brand new and you should expect these to change.
  • The Body can't be larger than 1,500 bytes. That limit comes from Google's Datastore. If enough people complain I'll figure something else out.
  • Files cannot be downloaded anymore. People were using this service as a file transfer tool.
  • Files are limited to 16K. This is for cost reasons and to curb using me for piracy.
  • Toilets can have at most 240 dumps (10 per hour). After that old dumps get deleted (in batches of 50) as new ones come in.
  • Depending on costs I'm likely to start deleting old dumps, and unused toilets.


  • The path to retrieve a dump is /t/toilet id/d/dump id
  • /json or /text may be appended to that path to get the data in other formats
  • 'latest' may be substituted for dump id to get the latest dump
  • So the following could both work: and