def fetcher_test(test_str): class PACHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'application/x-ns-proxy-autoconfig') self.end_headers() self.wfile.write(test_str.encode("ascii")) ready_event = threading.Event() def serve(): httpd = http.server.HTTPServer(("127.0.0.1", 8081), PACHandler) ready_event.set() httpd.handle_request() httpd.server_close() serve_thread = threading.Thread(target=serve, daemon=True) serve_thread.start() try: ready_event.wait() fetcher = pac.PACFetcher(QUrl("pac+http://127.0.0.1:8081")) fetcher.fetch() assert fetcher.fetch_error() is None finally: serve_thread.join() return fetcher
def test_fetch(): test_str = """ function FindProxyForURL(domain, host) { return "DIRECT; PROXY 127.0.0.1:8080; SOCKS 192.168.1.1:4444"; } """ class PACHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'application/x-ns-proxy-autoconfig') self.end_headers() self.wfile.write(test_str.encode("ascii")) ready_event = threading.Event() def serve(): httpd = http.server.HTTPServer(("127.0.0.1", 8081), PACHandler) ready_event.set() httpd.handle_request() httpd.server_close() serve_thread = threading.Thread(target=serve, daemon=True) serve_thread.start() try: ready_event.wait() res = pac.PACFetcher(QUrl("pac+http://127.0.0.1:8081")) assert res.fetch_error() is None finally: serve_thread.join() proxies = res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test"))) assert len(proxies) == 3
def proxy_from_url(url: QUrl) -> Union[QNetworkProxy, pac.PACFetcher]: """Create a QNetworkProxy from QUrl and a proxy type. Args: url: URL of a proxy (possibly with credentials). Return: New QNetworkProxy. """ ensure_valid(url) scheme = url.scheme() if scheme in ['pac+http', 'pac+https', 'pac+file']: fetcher = pac.PACFetcher(url) fetcher.fetch() return fetcher types = { 'http': QNetworkProxy.HttpProxy, 'socks': QNetworkProxy.Socks5Proxy, 'socks5': QNetworkProxy.Socks5Proxy, 'direct': QNetworkProxy.NoProxy, } if scheme not in types: raise InvalidProxyTypeError(scheme) proxy = QNetworkProxy(types[scheme], url.host()) if url.port() != -1: proxy.setPort(url.port()) if url.userName(): proxy.setUser(url.userName()) if url.password(): proxy.setPassword(url.password()) return proxy