Skip to content

Commit 811ad19

Browse files
committed
test extended proxy
1 parent 345c1be commit 811ad19

File tree

1 file changed

+53
-3
lines changed

1 file changed

+53
-3
lines changed

py/test/selenium/webdriver/common/bidi_browser_tests.py

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
# under the License.
1717

1818
import http.server
19+
import socket
1920
import socketserver
2021
import threading
2122

@@ -28,16 +29,65 @@
2829
from selenium.webdriver.common.window import WindowTypes
2930

3031

31-
class FakeProxyHandler(http.server.SimpleHTTPRequestHandler):
32+
class FakeProxyHandler(http.server.BaseHTTPRequestHandler):
3233
def do_GET(self):
33-
print(f"[Fake Proxy] Intercepted request to: {self.path}")
34+
print(f"[Fake Proxy] Intercepted GET request to: {self.path}")
3435
self.send_response(200)
36+
self.send_header("Content-Type", "text/html")
3537
self.end_headers()
36-
self.wfile.write(b"proxied response")
38+
self.wfile.write(b"<html><body>proxied response</body></html>")
39+
40+
def do_POST(self):
41+
print(f"[Fake Proxy] Intercepted POST request to: {self.path}")
42+
self.send_response(200)
43+
self.send_header("Content-Type", "text/html")
44+
self.end_headers()
45+
self.wfile.write(b"<html><body>proxied response</body></html>")
46+
47+
def do_CONNECT(self):
48+
"""Handle CONNECT requests for HTTPS tunneling."""
49+
print(f"[Fake Proxy] Intercepted CONNECT request to: {self.path}")
50+
51+
self.send_response(200, "Connection established")
52+
self.end_headers()
53+
54+
try:
55+
request_data = b""
56+
while True:
57+
try:
58+
chunk = self.rfile.read(1024)
59+
if not chunk:
60+
break
61+
request_data += chunk
62+
if b"\r\n\r\n" in request_data:
63+
break
64+
except socket.timeout:
65+
break
66+
67+
if request_data:
68+
print(f"[Fake Proxy] Received tunneled request: {request_data[:100]}...")
69+
response = (
70+
b"HTTP/1.1 200 OK\r\n"
71+
b"Content-Type: text/html\r\n"
72+
b"Content-Length: 37\r\n"
73+
b"Connection: close\r\n"
74+
b"\r\n"
75+
b"<html><body>proxied response</body></html>"
76+
)
77+
self.wfile.write(response)
78+
self.wfile.flush()
79+
except Exception as e:
80+
print(f"[Fake Proxy] Error handling CONNECT: {e}")
81+
finally:
82+
self.wfile.close()
83+
84+
def log_message(self, format, *args):
85+
pass
3786

3887

3988
def start_fake_proxy(port):
4089
server = socketserver.TCPServer(("localhost", port), FakeProxyHandler)
90+
server.timeout = 5
4191
thread = threading.Thread(target=server.serve_forever, daemon=True)
4292
thread.start()
4393
return server

0 commit comments

Comments
 (0)