Free tools Windows power users keep installed
One-click scans. No signup required.
A reliable curl monitor makes a bounded HTTP request, checks a defined success condition, records the result, and exits nonzero when the check fails. Save the script below, schedule it with cron or a systemd timer, and use its exit status to trigger alerts. For a website that needs visual checks rather than an HTTP health check, ScreenshotNeo is a separate screenshot API option.
Build a curl monitor that can fail clearly
This POSIX shell script uses GET, follows redirects, limits connection and total time, logs the final HTTP status and elapsed time, and returns a failure exit code for transport errors or HTTP statuses outside the chosen range. It accepts 2xx and 3xx responses; change the rule if your endpoint has a narrower contract.
#!/usr/bin/env sh
set -eu
url="https://example.com/health"
max_time=15
tmp_body=$(mktemp)
trap 'rm -f "$tmp_body"' EXIT HUP INT TERM
timestamp=$(date -u +%FT%TZ)
if result=$(curl --silent --show-error --location
--connect-timeout 5 --max-time "$max_time"
--output "$tmp_body"
--write-out '%{http_code} %{time_total}'
"$url"); then
http_code=${result% *}
time_total=${result#* }
else
rc=$?
printf '%s transport failure (curl exit %s): %sn' "$timestamp" "$rc" "$url" >&2
exit 1
fi
if [ "$http_code" -lt 200 ] || [ "$http_code" -ge 400 ]; then
printf '%s HTTP %s in %ss: %sn' "$timestamp" "$http_code" "$time_total" "$url" >&2
exit 1
fi
printf '%s OK HTTP %s in %ss: %sn' "$timestamp" "$http_code" "$time_total" "$url"
Save as /usr/local/bin/check-site.sh, then make it executable with chmod 755 /usr/local/bin/check-site.sh. Replace the example URL with a stable health endpoint on your site. The temporary response file prevents page content from filling the terminal or logs, and the trap removes it when the script ends.
Choose pass and fail rules deliberately
The sample treats any 2xx or 3xx final response as success. A redirect is accepted because --location follows it and the reported status is for the final response. If the check must prove that an endpoint returns exactly 200, change the condition to fail unless http_code equals 200. For an endpoint that intentionally returns a different status, encode that contract rather than relying on the general range.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitches#1 Best Overall
- Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
- Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
- CanaKit Turbine Black Case for the Raspberry Pi 5
- CanaKit Low Noise Bearing System Fan
- Mega Heat Sink - Black Anodized
A successful HTTP response does not necessarily mean the application is healthy. If a stable health endpoint returns a known marker, check that marker in $tmp_body after validating the status. Avoid exact-string checks against personalized or frequently changing pages. Keep the marker narrow and deterministic so harmless page edits do not page you.
Choose GET or HEAD
Use GET for the script above when you need to verify page content or when the server does not support HEAD. The curl documentation explains that -I / --head makes a HEAD request and retrieves headers only: curl HTTP scripting documentation. HEAD avoids transferring a body, but some servers reject that method even when GET works; curl documents that exception in its FAQ.
To make a status-only HEAD check, the core command can be:
curl --silent --show-error --head --location
--connect-timeout 5 --max-time 15
--output /dev/null
--write-out '%{http_code} %{time_total}n'
'https://example.com/health'
Apply the same explicit status rule and nonzero exit behavior as in the GET script. Follow redirects only if the final destination is part of the intended check; otherwise, omitting --location lets you detect a redirect itself.
Recommended Free Tools
Rank #2
- Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
- Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
- CanaKit Premium High-Gloss Raspberry Pi 4 Case with Integrated Fan Mount, CanaKit Low Noise Bearing System Fan
- CanaKit 3.5A USB-C Raspberry Pi 4 Power Supply (US Plug) with Noise Filter, Set of Heat Sinks, Display Cable - 6 foot (Supports up to 4K60p)
- CanaKit USB-C PiSwitch (On/Off Power Switch for Raspberry Pi 4)
Set timeouts and diagnose failure classes
--connect-timeout bounds connection establishment, while --max-time bounds the complete transfer. With the sample values, connection setup is limited to five seconds and the whole request to 15 seconds. Set them to match the endpoint’s expected response time and the scheduler interval: the script should finish well before the next run, or runs can overlap.
For a connection that is established but transfers data too slowly, curl also documents --speed-limit and --speed-time as transfer-rate guards in its FAQ. These are useful for a large download check, but generally unnecessary for a small health response with a total-time limit.
HTTP errors versus transport errors
The script keeps HTTP status failures distinct from curl transport failures. A 404 or 500 is an HTTP response; DNS resolution, TLS negotiation, connection refusal, and timeouts can prevent an HTTP response altogether. Retaining the code and curl’s diagnostic makes these failures easier to route and investigate.
Curl’s --fail option suppresses response data and makes many HTTP error responses fail at the command level, as described in the curl FAQ. For monitoring, do not use it as a substitute for recording the HTTP status: a check should preserve enough information to distinguish server responses from network and TLS failures.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Rank #3
- Not including the Raspberry Pi 5 (8GB), the Crowpi advanced version comes with the Raspberry Pi 5
- ELECROW Black Case for the Raspberry Pi 5, CrowPi is equipped with a 9-inch HD touchscreen along with a camera; All the regular components used in DIY electronics are packed into the CrowPi development board, such as LCD, LED matrix, buzzer, light sensor, PIR sensor, ultrasonic sensor, IR sensor, etc
- Raspberry Pi Sensors: The Crowpi raspberry pi 5 programming kit is jam-packed with lots of buttons such as 19 different sensors in a tidy easy to use package; You don't have to wait and wire things
- Build Quality: Solid ABS shell and well made components in one place make it strong and convenient to travel
- Programming Lessons: This raspberry pi 5 learning kit ships with step by step instructions and provides 21 lessons to take you through identifying components reading code and running it in the terminal
Redirects and TLS
With --location, curl requests the final destination after redirects and the script judges that final status. This is appropriate when the health check should represent the canonical endpoint, but not if an unexpected redirect is itself a fault. Keep TLS verification enabled; do not add --insecure to turn a certificate failure into a green check. If certificate expiry needs its own warning threshold, use a monitoring tool that exposes certificate-validity checks, such as the documented monitoring-plugins check_curl options: check_curl documentation.
Schedule the check and make failures visible
A script that is never run is not a monitor. To run it every five minutes with cron and append both standard output and errors to a log:
*/5 * * * * /usr/local/bin/check-site.sh >>/var/log/check-site.log 2>&1
Cron runs with a limited environment, so use absolute paths for the script and any files it needs. Check that the cron service is active and that the account running the job can execute the script and write the log. The nonzero exit code is the key integration point: cron email, a wrapper that pages on failure, or a heartbeat service can use it to raise an alert.
A systemd timer or another scheduler can run the same script. Whichever scheduler you choose, configure its logging and failure notifications explicitly, and avoid a schedule interval shorter than the longest allowed run unless overlapping checks are intentional.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #4
- Fully assembled for plug-and-play operation
- Includes Raspberry Pi 5 with 8GB RAM
- 256 GB PCIe Pi NVMe SSD (Pre-loaded with Pi 64-Bit OS)
- M.2 HAT+
- CanaKit Turbine Black Case for the Pi 5
Protect credentials and keep logs useful
- Prefer a dedicated, deterministic health endpoint over a home page whose content depends on cookies, geography, or user state.
- Store credentials in a protected environment or secret store; do not place tokens in the URL, script output, or a world-readable crontab.
- Send only the headers the endpoint requires. A body or diagnostic log can expose sensitive response content, so keep the default output limited to timestamp, status, duration, and URL.
- Do not disable certificate verification to get a passing result. Repair the certificate chain or trust configuration instead.
- Decide how long to retain logs and rotate them; an ever-growing append-only file can consume disk space.
When a local curl script is enough—and when it is not
A local script is transparent, inexpensive, and easy to adapt to a known endpoint. It is useful for a small number of checks when the machine running the script has the same network access that matters to you. Its limitation is vantage point: a monitor on one server cannot establish that users from other networks or regions can reach the site. It also does not provide alert routing or retained history unless you add those pieces.
For external checks, history, and notification workflows, compare hosted monitors by method (HEAD or GET), status and content rules, timeouts, latency thresholds, redirect and TLS behavior, authentication support, check locations, retention, and alert channels. HelloCron describes HTTP checks with URL, method, timeout, expected status or content, and cron-expression or interval schedules: HelloCron API documentation.
Or skip the browser setup
A curl health check validates an HTTP response; it does not show what a visitor sees in a rendered browser. For screenshot capture, ScreenshotNeo is a website screenshot API and MCP server. Its GET endpoint returns an image or PDF, and it can accept cookie or consent banners and remove known consent platforms, newsletter popups, and chat widgets before capture. Those clean-up steps can each be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers report the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents and other MCP clients.
Example cURL request, using the API key from your ScreenshotNeo account:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots. Sign up free for 1,000 screenshots a month with no card.
Best Value
- 【What you Get】You will get 1*Pi 5 8GB Single Board,1*RasTech Case,1*Active Cooler,1*Screwdriver,1*Installation instructions,12-month free warranty, lifetime service, 24-hour prompt and friendly response.
- 【More Connectors】There are two USB 3.0 ports(5Gbps simultaneously) and two USB 2.0 ports, which triple total bandwidth ,support any combination of up to two cameras or displays. Peak SD card performance is doubled through support for the SDR104 high-speed mode. It provides a smooth desktop experience for you. Offer Gigabit Ethernet and a PCIe interface, along with dual-band Wi-Fi and Bluetooth 5.0/BLE wireless capability. The RasTech Pi 5 Kit use the new 27W 5.1V 5A USB-C power connector.
- 【 Support Dual 4Kp60 Display 】Each of the two microHDMI sockets can control a 4K display at 60 Hertz, now support HDR, offering super HD video for media streaming projects. RPi 5 is the first RPi model that comes with a PCI Express port (PCIe 2.0 x1 with 500 MB/s) to attach SSDs (requires separate M.2 HAT).
- 【 Excellent Chips And Applications】Pi 5 is a full-size Pi computer using silicon built in-house at Pi. The RP1 “southbridge” provides the bulk of the I/O capabilities for Pi 5. Pi 5 is more friendly and convenient in the development of Internet of Things, Web development, machine identification, automatic control and other electronic equipment applications and network.
- 【 Faster CPU, Better GPU 】 Pi 5 features a Broadcom BCM2712 64-bit quad-core Arm Cortex-A76 processor running at 2.4GHz, it delivers a 2–3× increase in CPU performance relative to RaspberryPi 4. The 800MHz VideoCore VII GPU is compatible to OpenGL ES 3.1 and Vulkan 1.2, substantial uplift in graphics performance. Pi 5 Offers lightning-fast CPU speed, a PCI Express interface, a Real Time Clock (RTC) and a power button and runs significantly cooler than Pi 4.
Troubleshoot common failures
| Symptom | Likely cause | What to check |
|---|---|---|
| Script exits with “transport failure” | DNS, TLS, connection, or timeout problem prevented a usable response. | Run the curl command manually with --verbose to inspect the curl-to-server exchange; curl calls this its most useful debugging option in the HTTP scripting guide. Check DNS, certificate chain, firewall access, and timeout values. |
| HTTP status is 3xx or the check unexpectedly passes | --location follows redirects and the script checks the final response. |
Remove --location if a redirect should count as a failure, or change the accepted status rule. |
| HEAD returns an error but a browser works | The server may deny HEAD while allowing GET. | Switch to the GET script and write the response to a temporary file. |
| Check is slow or overlaps itself | The endpoint is slow, the timeout is too long for the schedule, or transfer stalls. | Review the logged duration, adjust connection and total timeouts, and ensure the scheduler interval accommodates the maximum run time. |
| Manual run succeeds but cron does not | Cron may use a different PATH, user, permissions, or environment. | Use absolute paths, verify the cron account’s access, and inspect redirected log output and scheduler logs. |
| It reports healthy while the application is broken | The URL may return a generic success page or a redirect without checking application content. | Target a health endpoint with deterministic content and add a body marker check that reflects the dependency or readiness condition you actually need. |
Do not log full response bodies or authorization headers to diagnose a check unless the output is protected and necessary. A short-lived verbose run is usually more useful than permanently noisy logs.
Frequently Asked Questions
Does curl monitor a website continuously by itself?
No. Curl makes a request when invoked; cron, a systemd timer, or another scheduler must run the script repeatedly.
Can I monitor a page that requires authentication?
Yes, if the endpoint permits the request and the script supplies the required credentials securely. Keep secrets out of the URL and logs.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

