summaryrefslogtreecommitdiffhomepage
path: root/scripts/test-url
blob: 2d17abfd0f7f9d6f038b506383c274fb1622e8ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env bash
set -euo pipefail

N="${1:-1000}"
DELAY_SEC="${DELAY_SEC:-0}"
URL_FILE="${2:-urls.txt}"

if [[ ! -f "$URL_FILE" ]]; then
  echo "Error: File '$URL_FILE' not found." >&2
  exit 1
fi

mapfile -t URLS < <(grep -vE '^\s*(#|$)' "$URL_FILE")

if [[ ${#URLS[@]} -eq 0 ]]; then
  echo "Error: No valid URLs found in $URL_FILE" >&2
  exit 1
fi

pick_url() {
  shuf -n 1 "$URL_FILE"
}

if [[ ! "$N" =~ ^[0-9]+$ ]] || (( N <= 0 )); then
  echo "Usage: $0 N   (N must be a positive integer)" >&2
  exit 2
fi

ok=0
fail=0

for i in $(seq 1 "$N"); do
  url="$(pick_url)"

  code="$(
    curl -sS -o /dev/null -L --max-time 3 -w '%{http_code}' \
        -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
        "$url" || echo 000
  )"

  if [[ "$code" =~ ^[23] ]]; then
    ((++ok))
  else
    ((++fail))
  fi

  printf "[%03d/%03d] %s -> HTTP %s\n" "$i" "$N" "$url" "$code"
  sleep "$DELAY_SEC"
done

echo "Done. ok=$ok fail=$fail"