Skip to main content

Proxy auto-config and auto-discovery for Python.

Project description

https://img.shields.io/pypi/v/pypac.svg?maxAge=2592000 https://img.shields.io/pypi/pyversions/pypac.svg https://readthedocs.org/projects/pypac/badge/?version=latest https://github.com/carsonyl/pypac/actions/workflows/tests.yml/badge.svg

PyPAC is a Python library for finding proxy auto-config (PAC) files and making HTTP requests that respect them. PAC files are often used in organizations that need fine-grained and centralized control of proxy settings.

PyPAC can find PAC files according to the DNS portion of the Web Proxy Auto-Discovery (WPAD) protocol. On Windows, PyPAC will automatically get the PAC file URL from the Internet Options dialog. On macOS, PyPAC will automatically get the PAC file URL from System Preferences.

PyPAC provides a subclass of a Requests Session, so you can start using it immediately, with any PAC file transparently discovered and honoured:

>>> from pypac import PACSession
>>> session = PACSession()
>>> session.get('http://example.org')
...

If a PAC file isn’t found, then PACSession behaves like a regular Session.

If you’re looking to add basic PAC functionality to a library that you’re using, try the pac_context_for_url() context manager:

from pypac import pac_context_for_url
import boto3

with pac_context_for_url('https://example.amazonaws.com'):
    client = boto3.client('sqs')
    client.list_queues()

This sets up proxy environment variables at the start of the scope, based on any auto-discovered PAC and the given URL. pac_context_for_url() should work for any library that honours proxy environment variables.

Features

  • The same Requests API that you already know and love

  • Honour PAC setting from Windows Internet Options and macOS System Preferences

  • Follow DNS Web Proxy Auto-Discovery protocol

  • Proxy authentication pass-through

  • Proxy failover and load balancing

  • Generic components for adding PAC support to other code

PyPAC supports Python 2.7 and 3.5+.

Installation

Install PyPAC using pip:

$ python -m pip install pypac

Documentation

PyPAC’s documentation is available at http://pypac.readthedocs.io/.

0.16.1 (2022-11-08)

  • Disable tldextract caching. (#64) Thanks @mpkuth.

0.16.0 (2022-01-01)

  • Change tld dependency to tldextract. (#61)

0.15.0 (2021-02-27)

  • Drop support for Python 3.4. (#48)

  • Support more proxy keywords: HTTP, HTTPS, SOCKS4, SOCKS5. (#41)

  • Absorb any exception from tld.get_tld(), not just TldDomainNotFound. (#30) Thanks @santiavenda2.

  • Reimplement dnsDomainIs(host, domain) as case-insensitive ‘host ends with domain’. (#42, #57)

0.14.0 (2020-12-05)

  • Add ability to supply PACFile to pac_context_for_url(). (#52) Thanks @alexrohvarger.

0.13.0 (2019-09-16)

  • Make it possible to configure the request for the PAC file. (#44) Thanks @SeyfSV.

  • urlencode proxy username and password. (#46) Thanks @aslafy-z.

0.12.0 (2018-09-11)

  • Fix possible error when dnsResolve() fails. (#34) Thanks @maximinus.

0.11.0 (2018-09-08)

  • Require dukpy 0.2.2, to fix memory leak. (#32) Thanks @maximinus.

  • Change Mac environment marker. (#30)

  • Support Python 3.7.

0.10.1 (2018-08-26)

  • Require tld 0.9.x. (#29)

0.10.0 (2018-08-26)

  • Switch JavaScript interpreter to dukpy. (#24)

  • Fix pac_context_for_url() erroring with DIRECT PAC setting. (#27)

  • Fix warning about invalid escape sequence (#26). Thanks @BoboTiG.

0.9.0 (2018-06-02)

  • Add macOS support for PAC in System Preferences (#23). Thanks @LKleinNux.

  • The from_registry argument on pypac.get_pac() and pypac.collect_pac_urls() is now deprecated and will be removed in 1.0.0. Use from_os_settings instead.

0.8.1 (2018-03-01)

  • Defer Js2Py import until it’s needed. It uses a lot of memory. See #20 for details.

0.8.0 (2018-02-28)

  • Add support for file:// PAC URLs on Windows.

0.7.0 (2018-02-21)

  • Drop support for Python 3.3.

  • Add doc explaining how to use pac_context_for_url().

  • Internal changes to dev and test processes.

0.6.0 (2018-01-28)

  • Add pac_context_for_url(), a context manager that adds basic PAC functionality through proxy environment variables.

0.5.0 (2018-01-18)

  • Accept PAC files served with no Content-Type header.

0.4.0 (2017-11-07)

  • Add recursion_limit keyword argument to PACSession and PACFile. The default is an arbitrarily high value (10000), which should cover most applications.

  • Exclude port numbers from host passed to FindProxyForURL(url, host).

0.3.1 (2017-06-23)

  • Update GitHub username.

0.3.0 (2017-04-12)

  • Windows: Get system auto-proxy config setting using winreg module.

  • Windows: Accept local filesystem paths from system proxy auto-config setting.

  • Raise PacComplexityError when recursion limit is hit while parsing PAC file.

  • Support setting PACSession.proxy_auth and ProxyResolver.proxy_auth after constructing an instance.

  • Narrative docs.

0.2.1 (2017-01-19)

  • Require Js2Py >= 0.43 for Python 3.6 support, and to avoid needing to monkeypatch out pyimport.

0.1.0 (2016-06-12)

  • First release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

PyPAC-0.16.1-py2.py3-none-any.whl (22.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file PyPAC-0.16.1-py2.py3-none-any.whl.

File metadata

  • Download URL: PyPAC-0.16.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 22.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.0

File hashes

Hashes for PyPAC-0.16.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 77aee379abb96c59063320c99e8641ce97d4f98f29a1d150242c4a332d9d9f67
MD5 cffd03ba455504fafbb20d8cf22bc0fd
BLAKE2b-256 0e33de761085b7c9e82329a9ba56e8d6be8704afc72a253dd34a7463354e5fb6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page