PyPAC: Proxy auto-config for Python

Release v0.14.0.

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. Are you using one?

PyPAC provides PACSession, a drop-in subclass of requests.Session, so you can start transparently finding and obeying PAC files immediately.


  • The same Requests API that you already know and love
  • Honour PAC setting from Windows Internet Options
  • 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.4+.


Install PyPAC using pip:

$ python -m pip install pypac

The source is also available on GitHub.


The quickest way to get started is to use a PACSession:

>>> from pypac import PACSession
>>> session = PACSession()
>>> session.get('')
<Response [200]>

Behind the scenes, the first request made with the session will trigger the PAC auto-discovery process. This process first looks for a PAC URL setting in Windows, and if not found, moves on to the DNS WPAD protocol.

Once a PAC file is found, it will be automatically consulted for every request. If a PAC wasn’t found, then PACSession acts just like a requests.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(''):
    client = boto3.client('sqs')

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.

Indices and tables