websockets: auto-tunnel through http proxy

When using a ws: or wss: url with a http proxy, automatically
switch to tunneling operation mode.

Add test_20_10 to check.

Fixes #21663
Closes #21691
This commit is contained in:
Stefan Eissing 2026-05-20 10:30:25 +02:00 committed by Daniel Stenberg
parent b158d1c9f7
commit 77e4e5b86d
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
4 changed files with 25 additions and 5 deletions

View file

@ -206,3 +206,17 @@ class TestWebsockets:
large = 0
r = client.run(args=[f'-{model}', '-c', str(count), '-m', str(large), url])
r.check_exit_code(0)
# use ws:// url with HTTP proxy, check that it tunnels automatically
def test_20_10_proxy_http(self, env: Env, httpd, ws_echo):
curl = CurlClient(env=env)
url = f'ws://127.0.0.1:{env.ws_port}/'
xargs = curl.get_proxy_args(proxys=False)
xargs.extend([
'--max-time', '2'
])
r = curl.http_download(urls=[url], alpn_proto='http/1.1', with_stats=True,
extra_args=xargs)
# The CONNECT through the proxy fails as it does not allow it
r.check_exit_code(7) # CURLE_COULDNT_CONNECT
assert r.stats[0]['http_connect'] == 403, f'{r}'