Symptom
503s. Looks like the server is down.
How the misdiagnosis went (worth recording)
"curl gets 200 but Python urllib gets 503" → concluded it's a client difference → curl immediately 503 too. In reality, the two clients were fighting over 2 concurrent slots per IP.
★ A conclusion from a single observation.
Iron rules