For a small urllib3 proxy diagnostic, use ProxyManager with retries disabled. This reports the first attempt instead of spending longer retrying an entry that has stopped working. In a uv-managed project:

uv add urllib3

Replace the documentation endpoint with an HTTP proxy from your service or the HTTP proxy list and run the request through that manager:

import urllib3

proxy = urllib3.ProxyManager(
    "http://203.0.113.10:8080",
    timeout=urllib3.Timeout(connect=5, read=10),
    retries=False,
)

try:
    response = proxy.request("GET", "https://example.com/")
    print(response.status)
    print(response.data.decode("utf-8", errors="replace")[:200])
finally:
    proxy.clear()

Read response.status first, then inspect response.data. These are urllib3's fields; Requests-style status_code and text are not substitutes. A website rejection can arrive through a functioning proxy. An exception before a response instead identifies a failure to complete the request.

retries=False is a diagnostic choice, not a production retry policy. The 5-second connection and 10-second read settings limit their own phases; they do not add up to a guaranteed 15-second elapsed deadline. DNS and response progress can affect the total wait.

The example preloads the body and clears the manager's pools at the end. For repeated requests through the same endpoint, keep that manager until the workload ends so its connections can be reused. Switching to preload_content=False changes that lifecycle: the caller must read and release the streamed response.

Choose the manager to match the listener. A normal PoolManager does not become proxy-aware because a URL is stored elsewhere; SOCKS uses urllib3.contrib.socks.SOCKSProxyManager and its optional dependencies. The code above follows the HTTP ProxyManager path.

Allakkat attuumassuteqartut