{"library":"requests-pkcs12","title":"requests-pkcs12","description":"The requests-pkcs12 library extends the popular Python `requests` library to add native support for client-side PKCS#12 (often .p12 or .pfx) certificates. It provides a clean implementation by creating a custom `TransportAdapter` and `SSLContext`, avoiding monkey patching or the use of unencrypted temporary files. Currently at version 1.27, it serves as a robust transitional solution until `requests` incorporates direct PKCS#12 support. The project appears to be actively maintained, with frequent updates.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install requests-pkcs12"],"cli":null},"imports":["from requests_pkcs12 import get","from requests_pkcs12 import post","from requests_pkcs12 import Pkcs12Adapter","from requests import Session"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom requests import Session\nfrom requests_pkcs12 import Pkcs12Adapter, get\n\n# --- Example 1: Simple one-off request ---\n# Requires a client certificate file (e.g., clientcert.p12) and its password.\n# Ensure 'pkcs12_filename' points to a valid .p12 file\n# and 'pkcs12_password' is correct for testing.\n\nPKCS12_FILENAME = os.environ.get('PKCS12_FILENAME', 'clientcert.p12') # Placeholder\nPKCS12_PASSWORD = os.environ.get('PKCS12_PASSWORD', 'your_pkcs12_password') # Placeholder\nTARGET_URL = os.environ.get('TARGET_URL', 'https://example.com/secure_endpoint') # Placeholder\n\ntry:\n    print(f\"\\nAttempting one-off GET to {TARGET_URL}...\")\n    r = get(\n        TARGET_URL,\n        pkcs12_filename=PKCS12_FILENAME,\n        pkcs12_password=PKCS12_PASSWORD,\n        verify=True # Always verify server certificates in production!\n    )\n    r.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)\n    print(f\"One-off GET successful! Status: {r.status_code}\")\n    # print(r.text)\nexcept Exception as e:\n    print(f\"One-off GET failed: {e}\")\n\n# --- Example 2: Using with a requests Session (recommended for multiple requests) ---\n\ntry:\n    print(f\"\\nAttempting session-based GET to {TARGET_URL}...\")\n    with Session() as s:\n        s.mount(\n            'https://',\n            Pkcs12Adapter(\n                pkcs12_filename=PKCS12_FILENAME,\n                pkcs12_password=PKCS12_PASSWORD\n            )\n        )\n        # The 'verify' parameter can be set on the session or per request.\n        # It is crucial for verifying the server's identity.\n        r_session = s.get(TARGET_URL, verify=True)\n        r_session.raise_for_status()\n        print(f\"Session-based GET successful! Status: {r_session.status_code}\")\n        # print(r_session.text)\nexcept Exception as e:\n    print(f\"Session-based GET failed: {e}\")\n\n# Note: For actual testing, replace 'clientcert.p12' and 'your_pkcs12_password'\n# with a real PKCS#12 file path and its password. You might need a dummy\n# server that requires client certificate authentication for full testing.","lang":"python","description":"This quickstart demonstrates how to perform both one-off and session-based HTTP requests using a PKCS#12 client certificate. It requires a `.p12` file and its corresponding password. For security, these values are retrieved from environment variables, or fall back to placeholders for demonstration. Remember to replace `PKCS12_FILENAME`, `PKCS12_PASSWORD`, and `TARGET_URL` with your actual certificate path, password, and the secure endpoint you wish to access.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"1.27","pypi_latest":"1.27","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.9,"avg_import_s":0.82,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.74,"mem_mb":12.4,"disk_size":"37.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":0.5,"mem_mb":12.4,"disk_size":"38M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.15,"mem_mb":13.7,"disk_size":"40.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.8,"import_time_s":0.96,"mem_mb":13.7,"disk_size":"40M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.9,"mem_mb":13.5,"disk_size":"31.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.92,"mem_mb":13.5,"disk_size":"32M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.89,"mem_mb":13.9,"disk_size":"31.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.91,"mem_mb":13.9,"disk_size":"32M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.66,"mem_mb":12.1,"disk_size":"37.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"requests-pkcs12","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.7,"import_time_s":0.6,"mem_mb":12.1,"disk_size":"38M"}]}}