{
  "versions": {
    "node": "v24.20.0",
    "playwright": "1.63.0",
    "chromium": "playwright build 1243",
    "puppeteer": "25.11.0-core-shim",
    "target": "https://example.com/",
    "recordedAt": "2026-09-19T14:28:21.198Z",
    "curl": "curl 8.18.0 (x86_64-pc-linux-gnu) libcurl/8.18.0 OpenSSL/3.5.5 zlib/1.3.1 brotli/1.2.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.21.2 libssh2/1.11.1 nghttp2/1.68.0 librtmp/2.3 mit-krb5/1.22.1 OpenLDAP/2.6.10",
    "chrome": "Google Chrome for Testing 153.0.8010.12"
  },
  "results": [
    {
      "tool": "requests",
      "case": "https target, no credentials",
      "error": "requests.exceptions.ProxyError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Requ"
    },
    {
      "tool": "requests",
      "case": "http target, no credentials",
      "status": 407,
      "proxy_authenticate": "Basic realm=\"lab\""
    },
    {
      "tool": "requests",
      "case": "https target, wrong password",
      "error": "requests.exceptions.ProxyError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Requ"
    },
    {
      "tool": "requests",
      "case": "https target, credentials in the proxy URL",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "requests",
      "case": "special-character password pasted raw into the URL",
      "error": "requests.exceptions.ProxyError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', NameResolutionError(\"HTTPSConnection(host='ss', port=80): Failed"
    },
    {
      "tool": "requests",
      "case": "special-character password percent-encoded",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "requests",
      "case": "HTTPProxyAuth with an https target",
      "error": "requests.exceptions.ProxyError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Requ"
    },
    {
      "tool": "requests",
      "case": "HTTPProxyAuth with an http target",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "requests",
      "case": "Proxy-Authorization in headers=, https target",
      "error": "requests.exceptions.ProxyError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Requ"
    },
    {
      "tool": "requests",
      "case": "Session.proxies has credentials, HTTPS_PROXY in the environment has none",
      "error": "requests.exceptions.ProxyError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Requ"
    },
    {
      "tool": "requests",
      "case": "same, but proxies= passed to the request itself",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "requests",
      "case": "HTTPS_PROXY in the environment carries the credentials",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "httpx",
      "case": "https target, no credentials",
      "error": "httpx.ProxyError: 407 Proxy Authentication Required"
    },
    {
      "tool": "httpx",
      "case": "http target, no credentials",
      "status": 407,
      "proxy_authenticate": "Basic realm=\"lab\""
    },
    {
      "tool": "httpx",
      "case": "auth= on the request (that is website authentication)",
      "error": "httpx.ProxyError: 407 Proxy Authentication Required"
    },
    {
      "tool": "httpx",
      "case": "credentials in the proxy URL",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "httpx",
      "case": "special-character password pasted raw into the URL",
      "error": "httpx.ConnectError: [Errno -3] Temporary failure in name resolution"
    },
    {
      "tool": "httpx",
      "case": "httpx.Proxy(url, auth=(user, special password))",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "aiohttp",
      "case": "https target, no credentials",
      "error": "aiohttp.client_exceptions.ClientHttpProxyError: 407, message='Proxy Authentication Required', url='http://127.0.0.1:46303'"
    },
    {
      "tool": "aiohttp",
      "case": "http target, no credentials",
      "status": 407,
      "proxy_authenticate": "Basic realm=\"lab\""
    },
    {
      "tool": "aiohttp",
      "case": "auth= on the request (that is website authentication)",
      "error": "aiohttp.client_exceptions.ClientHttpProxyError: 407, message='Proxy Authentication Required', url='http://127.0.0.1:46303'"
    },
    {
      "tool": "aiohttp",
      "case": "proxy_auth=aiohttp.BasicAuth(user, special password)",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "aiohttp",
      "case": "credentials in the proxy URL",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "aiohttp",
      "case": "HTTPS_PROXY with credentials, default session (trust_env=False)",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "aiohttp",
      "case": "HTTPS_PROXY with credentials, ClientSession(trust_env=True)",
      "status": 200,
      "proxy_authenticate": null
    },
    {
      "tool": "urllib3",
      "case": "ProxyManager, no credentials",
      "error": "urllib3.exceptions.ProxyError: ('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required'))"
    },
    {
      "tool": "urllib3",
      "case": "ProxyManager with credentials in the proxy URL",
      "error": "urllib3.exceptions.ProxyError: ('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required'))"
    },
    {
      "tool": "urllib3",
      "case": "ProxyManager with proxy_headers=make_headers(proxy_basic_auth=...)",
      "status": 200
    },
    {
      "tool": "python",
      "versions": {
        "python": "3.14.4",
        "requests": "2.34.2",
        "httpx": "0.28.1",
        "aiohttp": "3.14.3",
        "urllib3": "2.8.0"
      }
    },
    {
      "tool": "python",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "GET http://example.com/ proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=none",
        "GET http://example.com/ proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=none",
        "GET http://example.com/ proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=none",
        "GET http://example.com/ proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "playwright",
      "case": "no credentials",
      "result": {
        "status": 407,
        "statusText": "Proxy Authentication Required",
        "proxyAuthenticate": "Basic realm=\"lab\"",
        "bodyChars": 0
      },
      "requestFailed": [
        "net::ERR_TUNNEL_CONNECTION_FAILED"
      ],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "playwright",
      "case": "wrong password",
      "result": {
        "status": 407,
        "statusText": "Proxy Authentication Required",
        "proxyAuthenticate": "Basic realm=\"lab\"",
        "bodyChars": 0
      },
      "requestFailed": [
        "net::ERR_TUNNEL_CONNECTION_FAILED"
      ],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)"
      ]
    },
    {
      "tool": "playwright",
      "case": "credentials inside proxy.server URL",
      "result": {
        "status": 407,
        "statusText": "Proxy Authentication Required",
        "proxyAuthenticate": "Basic realm=\"lab\"",
        "bodyChars": 0
      },
      "requestFailed": [
        "net::ERR_TUNNEL_CONNECTION_FAILED"
      ],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "playwright",
      "case": "credentials in httpCredentials instead of proxy",
      "result": {
        "status": 200,
        "statusText": "OK",
        "bodyChars": 284
      },
      "requestFailed": [],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "playwright",
      "case": "proxy.username and proxy.password",
      "result": {
        "status": 200,
        "statusText": "OK",
        "bodyChars": 284
      },
      "requestFailed": [],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "playwright",
      "case": "special-character password in proxy.password",
      "result": {
        "status": 200,
        "statusText": "OK",
        "bodyChars": 284
      },
      "requestFailed": [],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "playwright",
      "case": "http target, no credentials",
      "result": {
        "status": 407,
        "statusText": "Proxy Authentication Required",
        "proxyAuthenticate": "Basic realm=\"lab\"",
        "bodyChars": 45
      },
      "requestFailed": [],
      "proxySaw": [
        "GET http://example.com/ proxy-authorization=none"
      ]
    },
    {
      "tool": "playwright",
      "case": "proxy on the context, not the browser",
      "result": {
        "status": 200
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "playwright",
      "case": "request.newContext (API testing) without and with credentials",
      "without": {
        "status": 407
      },
      "with": {
        "status": 200
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "no page.authenticate",
      "result": {
        "error": "net::ERR_INVALID_AUTH_CREDENTIALS at https://example.com/"
      },
      "requestFailed": [
        "net::ERR_INVALID_AUTH_CREDENTIALS"
      ],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "wrong password in page.authenticate",
      "result": {
        "status": 407
      },
      "requestFailed": [
        "net::ERR_HTTP_RESPONSE_CODE_FAILURE"
      ],
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "Proxy-Authorization via setExtraHTTPHeaders",
      "result": {
        "error": "net::ERR_INVALID_ARGUMENT at https://example.com/"
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "page.authenticate before goto",
      "result": {
        "status": 200
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "special-character password in page.authenticate",
      "result": {
        "status": 200
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "page.authenticate after a failed goto, then retry",
      "first": {
        "error": "net::ERR_INVALID_AUTH_CREDENTIALS at https://example.com/"
      },
      "retry": {
        "status": 200
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "second page in the same context, no authenticate call",
      "first": {
        "status": 200
      },
      "secondPage": {
        "status": 200
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "page in a new browser context, no authenticate call",
      "first": {
        "status": 200
      },
      "newContextPage": {
        "error": "net::ERR_INVALID_AUTH_CREDENTIALS at https://example.com/"
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok",
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "http target, no page.authenticate",
      "result": {
        "error": "net::ERR_INVALID_AUTH_CREDENTIALS at http://example.com/"
      },
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "puppeteer",
      "case": "credentials inside --proxy-server",
      "result": {
        "error": "net::ERR_NO_SUPPORTED_PROXIES at https://example.com/"
      },
      "proxySaw": []
    },
    {
      "tool": "curl",
      "case": "no credentials",
      "exit": 7,
      "stderr": "curl: (7) CONNECT tunnel failed, response 407",
      "result": "http=000 connect=407 exit=7",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "curl",
      "case": "--user instead of --proxy-user",
      "exit": 7,
      "stderr": "curl: (7) CONNECT tunnel failed, response 407",
      "result": "http=000 connect=407 exit=7",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none"
      ]
    },
    {
      "tool": "curl",
      "case": "--proxy-user",
      "result": "http=200 connect=200 exit=0",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "curl",
      "case": "http target, no credentials",
      "result": "http=407 connect=000 exit=0",
      "proxySaw": [
        "GET http://example.com/ proxy-authorization=none"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_requests.py",
      "credentials": "correct",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_requests.py",
      "credentials": "correct, special characters",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_requests.py",
      "credentials": "wrong password",
      "stdout": "proxy rejected the request: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required')))",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_httpx.py",
      "credentials": "correct",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_httpx.py",
      "credentials": "correct, special characters",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_httpx.py",
      "credentials": "wrong password",
      "stdout": "proxy rejected the request: 407 Proxy Authentication Required",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_aiohttp.py",
      "credentials": "correct",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_aiohttp.py",
      "credentials": "correct, special characters",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix_aiohttp.py",
      "credentials": "wrong password",
      "stdout": "proxy rejected the request: 407 Proxy Authentication Required",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix-playwright.mjs",
      "credentials": "correct",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix-playwright.mjs",
      "credentials": "correct, special characters",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix-playwright.mjs",
      "credentials": "wrong password",
      "exit": 1,
      "stdout": "",
      "stderr": "Error: proxy rejected the credentials: 407 Proxy Authentication Required",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix-puppeteer.mjs",
      "credentials": "correct",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix-puppeteer.mjs",
      "credentials": "correct, special characters",
      "stdout": "200",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=ok"
      ]
    },
    {
      "tool": "fix sample",
      "file": "fix-puppeteer.mjs",
      "credentials": "wrong password",
      "exit": 1,
      "stdout": "",
      "stderr": "Error: proxy rejected the credentials: 407",
      "proxySaw": [
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=none",
        "CONNECT example.com:443 proxy-authorization=wrong (labuser:wrong)"
      ]
    }
  ]
}