online / endpoints 59 / categories 14 / rate 60/min/ip /

GET /random

GET /random

Selects one chaos endpoint at random and returns its response. The selected path is reported in X-Chaos-Random-From so failing clients can pin down which scenario tripped them. Streaming endpoints (/slow, /drip, /partial-stream) are excluded so each pick returns promptly.

bash
# Single call — returns whichever scenario was picked
curl -i https://chaos.catastrophic.io/random

# Soak test: 50 calls, log status and which endpoint each hit
for i in $(seq 1 50); do
    curl -s -o /dev/null \
        -w "%{http_code}  %{header.x-chaos-random-from}\n" \
        https://chaos.catastrophic.io/random
done
import requests

# Single call — returns whichever scenario was picked
r = requests.get('https://chaos.catastrophic.io/random', allow_redirects=False)
print(r.status_code, r.headers.get('X-Chaos-Random-From'))

# Soak test: 50 calls, log status and which endpoint each hit
for _ in range(50):
    r = requests.get('https://chaos.catastrophic.io/random', allow_redirects=False)
    print(r.status_code, r.headers.get('X-Chaos-Random-From'))
// Single call — returns whichever scenario was picked
const r = await fetch('https://chaos.catastrophic.io/random', { redirect: 'manual' });
console.log(r.status, r.headers.get('x-chaos-random-from'));

// Soak test: 50 calls, log status and which endpoint each hit
for (let i = 0; i < 50; i++) {
    const r = await fetch('https://chaos.catastrophic.io/random', { redirect: 'manual' });
    console.log(r.status, r.headers.get('x-chaos-random-from'));
}
package main

import (
    "fmt"
    "net/http"
)

func main() {
    // Don't follow redirects so /redirect-chain is observable
    c := &http.Client{
        CheckRedirect: func(*http.Request, []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }

    // Soak test: 50 calls, log status and which endpoint each hit
    for i := 0; i < 50; i++ {
        r, err := c.Get("https://chaos.catastrophic.io/random")
        if err != nil {
            fmt.Println("err:", err)
            continue
        }
        fmt.Println(r.StatusCode, r.Header.Get("X-Chaos-Random-From"))
        r.Body.Close()
    }
}
// Cargo.toml: reqwest = { version = "0.12", features = ["blocking"] }
fn main() -> Result<(), Box> {
    // Don't follow redirects so /redirect-chain is observable
    let c = reqwest::blocking::Client::builder()
        .redirect(reqwest::redirect::Policy::none())
        .build()?;

    // Soak test: 50 calls, log status and which endpoint each hit
    for _ in 0..50 {
        let r = c.get("https://chaos.catastrophic.io/random").send()?;
        let from = r.headers().get("x-chaos-random-from")
            .and_then(|h| h.to_str().ok()).unwrap_or("");
        println!("{}  {}", r.status(), from);
    }
    Ok(())
}
import java.net.URI;
import java.net.http.*;

HttpClient c = HttpClient.newBuilder()
    .followRedirects(HttpClient.Redirect.NEVER)
    .build();
var req = HttpRequest.newBuilder(URI.create("https://chaos.catastrophic.io/random")).build();
var discard = HttpResponse.BodyHandlers.discarding();

// Soak test: 50 calls, log status and which endpoint each hit
for (int i = 0; i < 50; i++) {
    var r = c.send(req, discard);
    System.out.println(r.statusCode() + "  " +
        r.headers().firstValue("X-Chaos-Random-From").orElse(""));
}
// Don't follow redirects so /redirect-chain is observable
using var handler = new HttpClientHandler { AllowAutoRedirect = false };
using var c = new HttpClient(handler);

// Soak test: 50 calls, log status and which endpoint each hit
for (int i = 0; i < 50; i++)
{
    var r = await c.GetAsync("https://chaos.catastrophic.io/random");
    r.Headers.TryGetValues("X-Chaos-Random-From", out var from);
    Console.WriteLine($"{(int)r.StatusCode}  {string.Join("", from ?? new[] { "" })}");
}
require 'net/http'

uri = URI('https://chaos.catastrophic.io/random')

# Soak test: 50 calls, log status and which endpoint each hit
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    50.times do
        r = http.request_get(uri.request_uri)
        puts "#{r.code}  #{r['X-Chaos-Random-From']}"
    end
end
# Single call — returns whichever scenario was picked
$r = Invoke-WebRequest 'https://chaos.catastrophic.io/random' -SkipHttpErrorCheck
"$($r.StatusCode)  $($r.Headers['X-Chaos-Random-From'])"

# Soak test: 50 calls, log status and which endpoint each hit
1..50 | ForEach-Object {
    $r = Invoke-WebRequest 'https://chaos.catastrophic.io/random' -SkipHttpErrorCheck
    "$($r.StatusCode)  $($r.Headers['X-Chaos-Random-From'])"
}