PyPAC: Proxy auto-config for Python

Release v0.12.0.

https://img.shields.io/pypi/v/pypac.svg?maxAge=2592000 https://readthedocs.org/projects/pypac/badge/?version=latest https://img.shields.io/travis/carsonyl/pypac.svg?maxAge=2592000 https://ci.appveyor.com/api/projects/status/y7nxvu2feu87i39t/branch/master?svg=true https://img.shields.io/coveralls/carsonyl/pypac/HEAD.svg?maxAge=2592000 https://img.shields.io/codacy/grade/71ac103b491d44efb94976ca5ea5d89c.svg?maxAge=2592000

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.

Features

  • 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+.

Installation

Install PyPAC using pip:

$ pip install pypac

The source is also available on GitHub.

Quickstart

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

>>> from pypac import PACSession
>>> session = PACSession()
>>> session.get('http://example.org')
<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('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.

Indices and tables