Skip to main content

pypac4http2

Python package which builds on pypac to add pac file support for httplib2 Http

This package adds proxy auto configure pac support to the httplib2 library Http classby sub-classing the class and adding a new constructor parameter for a resolver class.

Installation

pip install pypac4http2

Usage

HttpPac Class

The HttpPac class extends httplib2.Http and automatically resolves the proxy for each request using a PAC file.

from pypac4http2 import HttpPac

# Automatically discover PAC using OS settings or WPAD
http = HttpPac()
response, content = http.request("http://example.org")

# Specify a PAC URL
http = HttpPac(pac_url="http://internal.corp/proxy.pac")
response, content = http.request("http://example.org")

# Provide PAC as a JavaScript string
pac_js = "function FindProxyForURL(url, host) { return 'PROXY proxy:8080'; }"
http = HttpPac(pac_js=pac_js)
response, content = http.request("http://example.org")

# The library also supports the PAC_URL environment variable:
# export PAC_URL=http://internal.corp/proxy.pac

Usage with Google API Client

HttpPac is designed to be a drop-in replacement for httplib2.Http, making it ideal for use with the Google API Python Client.

In a typical enterprise environment, you may also need your authentication flow (which often uses google-auth and requests) to respect the same PAC settings. You can use pypac.PACSession alongside HttpPac.

import os
from googleapiclient.discovery import build
import google.auth
from google.auth.transport.requests import Request
from pypac import PACSession, get_pac
from pypac4http2 import HttpPac

# 1. Use PACSession for authentication flows that use 'requests'
# pypac.PACSession doesn't natively check PAC_URL, so we get the PAC file manually
pac_url = os.environ.get("PAC_URL")
pac = get_pac(url=pac_url) if pac_url else get_pac()
auth_session = PACSession(pac=pac)
auth_request = Request(session=auth_session)

# 2. Get default credentials using the proxy-aware request
credentials, project = google.auth.default(request=auth_request)

# 3. Refresh credentials using the proxy-aware session
credentials.refresh(auth_request)

# 4. Use HttpPac for the Google API service calls (which use 'httplib2')
# Both will respect PAC settings (e.g. via PAC_URL environment variable)
http = HttpPac()
service = build('drive', 'v3', http=http, credentials=credentials)

# All API calls will now automatically resolve proxies via PAC
files = service.files().list().execute()

CLI Tool

The package includes a CLI tool pypac4http2 to resolve proxies for a given URL.

# Resolve proxy using OS auto-discovery (or PAC_URL env var if set)
pypac4http2 https://google.com

# Resolve proxy using a specific PAC URL
pypac4http2 --pac-url http://example.com/proxy.pac https://google.com

# Resolve proxy using a PAC JavaScript string
pypac4http2 --pac-js "function FindProxyForURL(url, host) { return 'DIRECT'; }" https://google.com

Output Example:

Proxy choice: PROXY proxy.example.com:8080
{
  "target_url": "https://google.com",
  "pac_result": "PROXY proxy.example.com:8080",
  "proxy_info": {
    "proxy_type": "HTTP",
    "proxy_host": "proxy.example.com",
    "proxy_port": 8080
  }
}

Release files for pypac4http2 0.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pypac4http2 0.0.7
File Size Uploaded
pypac4http2-0.0.7.tar.gz 15.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pypac4http2 0.0.7
File Interpreter ABI Platform
pypac4http2-0.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 26.2 kB

Release files / pypac4http2-0.0.7.tar.gz

Download URL pypac4http2-0.0.7.tar.gz
Size 15.7 kB
Tags Source
SHA-256 checksum
How to use checksums
90cd9cdba9752041d16550ef8d3c3ef527bf6ca65fc239cb7c1ce16bf218053a
BLAKE2b-256 checksum
How to use checksums
0d407b306b2ab86d38a41717d6ad099dd278eb68c580a5fa6a19e8eaa3e25baa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 25, 2026.

Transparency log

Release files / pypac4http2-0.0.7-py3-none-any.whl

Download URL pypac4http2-0.0.7-py3-none-any.whl
Size 10.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9589bf22126ef9e59ec0d3d1540a99f47fc0917b6f93b811b62405bb08a3f302
BLAKE2b-256 checksum
How to use checksums
ecd12b4981c6e483bb9187a14b77cbffe4ac287d1f8a5fb19d346bb7d587baaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.7 This release

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page