GET /infinite/html/users/{path}
Deterministic well-formed user HTML for any path tail. Links to the user's posts, comments, and followed users.
path
Arbitrary path of any depth; seeds the deterministic content generator. Same path tail under different types yields different content.
links
Optional number of outbound links (0-10, default 10). Out-of-range values are clamped silently.
expect: 200 OK with Content-Type: text/html. A well-formed user-profile page with up to 10 outbound /infinite/html/* links (5 posts, 3 comments, 2 follows).
curl -s 'https://not.catastrophic.io/infinite/html/users/alice' | grep -oE 'href="/infinite/[^"]+"' | sort -u
import re, urllib.request
resp = urllib.request.urlopen("https://not.catastrophic.io/infinite/html/users/alice")
print("Content-Type:", resp.headers.get("Content-Type"))
print("X-Not-Infinite-Type:", resp.headers.get("X-Not-Infinite-Type"))
body = resp.read().decode()
links = re.findall(r'href="(/infinite/[^"]+)"', body)
for link in links:
print(link)
const res = await fetch("https://not.catastrophic.io/infinite/html/users/alice");
const html = await res.text();
console.log("Content-Type:", res.headers.get("content-type"));
console.log("X-Not-Infinite-Type:", res.headers.get("x-not-infinite-type"));
const links = [...html.matchAll(/href="(\/infinite\/[^"]+)"/g)].map(m => m[1]);
links.forEach(l => console.log(l));
package main
import (
"fmt"
"io"
"net/http"
"regexp"
)
func main() {
resp, _ := http.Get("https://not.catastrophic.io/infinite/html/users/alice")
defer resp.Body.Close()
fmt.Println("Content-Type:", resp.Header.Get("Content-Type"))
fmt.Println("X-Not-Infinite-Type:", resp.Header.Get("X-Not-Infinite-Type"))
body, _ := io.ReadAll(resp.Body)
re := regexp.MustCompile(`href="(/infinite/[^"]+)"`)
for _, m := range re.FindAllStringSubmatch(string(body), -1) {
fmt.Println(m[1])
}
}
// [dependencies] reqwest = { version = "0.11", features = ["blocking"] }
// regex = "1"
use reqwest::blocking::get;
use regex::Regex;
fn main() -> Result<(), Box> {
let resp = get("https://not.catastrophic.io/infinite/html/users/alice")?;
println!("Content-Type: {:?}", resp.headers().get("content-type"));
println!("X-Not-Infinite-Type: {:?}", resp.headers().get("x-not-infinite-type"));
let body = resp.text()?;
let re = Regex::new(r#"href="(/infinite/[^"]+)""#)?;
for cap in re.captures_iter(&body) {
println!("{}", &cap[1]);
}
Ok(())
}
import java.net.URI;
import java.net.http.*;
import java.util.regex.*;
public class Demo {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder(URI.create("https://not.catastrophic.io/infinite/html/users/alice")).build();
HttpResponse res = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("Content-Type: " + res.headers().firstValue("content-type").orElse(""));
System.out.println("X-Not-Infinite-Type: " + res.headers().firstValue("x-not-infinite-type").orElse(""));
Matcher m = Pattern.compile("href=\"(/infinite/[^\"]+)\"").matcher(res.body());
while (m.find()) System.out.println(m.group(1));
}
}
using System;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
class Demo {
static async Task Main() {
using var client = new HttpClient();
var res = await client.GetAsync("https://not.catastrophic.io/infinite/html/users/alice");
Console.WriteLine("Content-Type: " + res.Content.Headers.ContentType);
if (res.Headers.TryGetValues("X-Not-Infinite-Type", out var v))
Console.WriteLine("X-Not-Infinite-Type: " + string.Join(",", v));
var body = await res.Content.ReadAsStringAsync();
foreach (Match m in Regex.Matches(body, "href=\"(/infinite/[^\"]+)\""))
Console.WriteLine(m.Groups[1].Value);
}
}
require 'net/http'
uri = URI("https://not.catastrophic.io/infinite/html/users/alice")
res = Net::HTTP.get_response(uri)
puts "Content-Type: #{res['content-type']}"
puts "X-Not-Infinite-Type: #{res['x-not-infinite-type']}"
res.body.scan(/href="(\/infinite\/[^"]+)"/) { |m| puts m[0] }
headers
body
What you get
Returns an HTML user-profile page. Links to up to 10 other /infinite/html/* pages: 5 of the user’s posts, 3 of their comments, and 2 users they follow. Link destinations are derived from the same seed and stable across calls.
Example URLs
/infinite/html/users/alice/infinite/html/users/alice/profile/infinite/html/users/dept/sales/alice
Caps and headers
Content-Type: text/html; charset=utf-8Cache-Control: public, max-age=86400X-Robots-Tag: noindex, nofollowX-Not-Payload: infiniteX-Not-Infinite-Type: usersX-Not-Infinite-Format: html- Body capped at 20 KB. If truncated,
X-Not-Infinite-Truncated: trueis set. - Rate limit: 10 requests / 60s per IP (separate from the standard 60/60s limit).