cURL Error 28: Operation Timed OutWhat cURL Error 28 Actually Means
Error 28 is CURLE_OPERATION_TIMEDOUT: curl gave up because a time limit expired. Two separate limits can trigger it. The connect timeout (--connect-timeout) covers DNS resolution, the TCP handshake, and any proxy or TLS negotiation; the overall limit (--max-time) covers the entire transfer, body included. The error text tells you which one fired: "Connection timed out" points at the connect phase, while "Operation timed out after N milliseconds with X bytes received" means the transfer started and then outran its deadline.
Crucially, error 28 is not a refusal. The server did not reject you — something in the path was too slow or silently discarded packets. Common producers: an overloaded target, slow DNS, a firewall that blackholes traffic instead of rejecting it, a congested route, or a slow proxy exit. Compare error 7 (connection refused), where something actively said no; 28 is what silence looks like.
The bytes-received figure is a free diagnostic. Zero bytes received means you have a connectivity or reachability problem; a partial count means data was flowing but throughput could not finish the job in time — a tuning problem, not an outage.