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.
# 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'])"
}