Both look like failure from your side, and the fix for one does nothing for the other. Three checks separate them in about a minute.
Point the same credentials at a target that never blocks anyone. If this returns an address that is not yours, the proxy is healthy and the problem is between the exit address and your target:
curl -x http://USER:PASS@gw.pyproxy.com:1111 https://api.ipify.org
If it fails here too, the problem is the connection, the credentials or the port — not a block. Try another port for the same gateway before anything else, because filtered outbound ports produce exactly this symptom.
Blocks announce themselves if you look at the response rather than the exception your library raised:
curl -x http://USER:PASS@gw.pyproxy.com:1111 -s -o /dev/null -w "%{http_code}\n" https://target.example
A 403 with a challenge page, a 429, a captcha, or a 200 whose body is a "verify you are human" interstitial all mean the same thing: the request arrived and was refused on the basis of who it looked like. Timeouts and connection resets at the TCP level usually mean something else.
Repeat with a different exit address in the same country. If the second address works, the first was individually blocked and rotation solves it. If every address in that country is refused while another country passes, the target is filtering by geography or by address type rather than by individual address.
That distinction decides the fix. Individually spent addresses call for rotation. A whole category being refused means you need a different category — a residential or mobile address rather than a datacentre one, most commonly.
Do not add retries in a loop against a blocked address; you confirm the pattern that got you blocked and burn traffic doing it. And do not judge a pool by one target on one day — check a neutral endpoint first so you know what you are measuring.
Send the same credentials to a neutral endpoint such as api.ipify.org. If that answers, the proxy is fine and your target is refusing it.
A 403 with a challenge page, a 429, a captcha, or a 200 whose body is an interstitial. Connection resets and timeouts more often mean a network or port problem.
It fixes an individually blocked address. It does not fix a target that refuses a whole category, such as all datacentre ranges — for that you need residential or mobile addresses.
Yes, a refused response is still bytes. Retrying in a tight loop against a block is the expensive mistake.