Introducing Request Mirror: a free micro-service to reflect HTTP requests

Published on September 22, 2025 by Freek Van der Herten

We have launched Request Mirror, a little free service to reflect HTTP requests. We've also open-sourced it: you can read the code in the ohdearapp/request-mirror.ohdear.app repo on GitHub.

In this blog post I'd like to explain why we built it and how you can use it.

Why we needed to reflect HTTP requests #

One of the many checks we offer is our uptime check. Like all our checks, we have an extensive test suite for our uptime monitoring functionality. We have tests that prove that when a site is down, we actually do warn our users.

So, in our end-to-end tests we need to have a site available that is considered down. Instead of bringing an actually service down, wouldn't it be nice if we could just tell a website what status code it should return?

That's exactly the sort of thing that Request Mirror can do. It has a route /status/ that you can append with any status code you want. So a request to https://request-mirror.ohdear.app/status/500 will respond with status code 500, mimicking a website that is down. Try it by visiting that URL in the browser and use your developer tools to see the status code.

In our tests we can use this:

// I've simplified the test for brevity
it('can send a notification when the site is down', function () {
   performUptimeCheck('https://request-mirror.ohdear.app/status/500');
    
   Notification::assertSent(UptimeCheckFailedNotification::class);
});

Other endpoints #

Our uptime check has many options to tailor it to your specific monitoring needs. To be able to test all these options, we added extra endpoints to Request Mirror.

Let's take a look at the ability to reflect headers:

$response = Http::withHeaders([
    'extra-header' => 'extra-value',
])->get('https://request-mirror.ohdear.app/get');

// the json response will have a headers property that contains
// the `extra-header` header.
$response->json('headers');

These are also available:

And there are a few more listed on Request Mirror.

An alternative: HTTPBin #

There's also an excellent alternative that's been around for a long time: HTTP Bin. Request Mirror was heavily inspired by HTTP Bin.

Even though HTTP Bin works well, I still took the time to build Request Mirror, because the uptime of HTTP Bin was a bit flaky in the past period, causing our tests to fail sometimes. And with Request Mirror being in my control, I can add any endpoint Oh Dear needs for its test suite.

In closing #

Granted, Request Mirror is not the most exciting project, but if you need this kind of functionality it can come quite handy.

Should you need another endpoint for your testing, I'm open for pull requests to the request mirror repo on GitHub.

Start using Oh Dear today!

  • Access to all features
  • Cancel anytime
  • No credit card required
  • First 10 days free

More updates

Want to get started? We offer a no-strings-attached 10 day trial. No credit card required.

Start monitoring

You're all set in
less than a minute!