Respect system proxy exclusions.
See original GitHub issue- Initially raised as discussion #1513
We’re currently leaning on urllib.request.getproxies()
to determine the system proxy setup, and setup which mounts should be a proxy transport and which should be a regular transport.
However, we’re not using urllib.request.proxy_bypass(host)
.
This all works as expected when environment settings are being used. HTTP_PROXY
, HTTPS_PROXY
, and ALL_PROXY
. In that case we’re reading NO_PROXY
, and ensuring anything hostname patterns there are mounted as a regular transport…
However, in the case when none of those environment variables are set getproxies()
instead falls back to system proxy configuration. For windows this is registry based. ProxyEnable
and ProxyOverride
. For Mac this is sysconf based.
In those cases, we’re correctly getting the configured proxies, but we aren’t dealing with proxy exclusions.
We’d like to be able to setup these exclusions with our neat hostname pattern matched mounts system, which actually
means we can’t just fallback to urllib.request.proxy_bypass(host)
, because that needs to be called per-host.
So, first steps…
- What exactly is the format of the windows registry
ProxyOverride
field? - What exactly is the format of the “exceptions” field returned by
from _scproxy import _get_proxy_settings()
?
Issue Analytics
- State:
- Created 2 years ago
- Comments:9 (4 by maintainers)
Being able to pick up and use the system proxy settings — especially proxy auto config — would be a benefit in certain environments, even if it’s an option and not the default. I’m no longer in a situation like that, but Python PAC support on macOS could have made configuring some projects much easier. It might have been a reason to choose a library like HTTPX over another.
Sticking to environment only settings would be one option, yes, though I’m not convinced that’d be the best from a user-experiance point of view.