diff --git a/packages/client-python/src/rocketride/mixins/connection.py b/packages/client-python/src/rocketride/mixins/connection.py index 7354d93ab..738a0dabc 100644 --- a/packages/client-python/src/rocketride/mixins/connection.py +++ b/packages/client-python/src/rocketride/mixins/connection.py @@ -314,8 +314,17 @@ def _get_websocket_uri(uri: str) -> str: parsed = urllib.parse.urlparse(normalized) ws_scheme = 'wss' if parsed.scheme in ('https', 'wss') else 'ws' - ws_uri = parsed._replace(scheme=ws_scheme) - return f'{ws_uri.geturl()}/task/service' + path = (parsed.path or '/').rstrip('/') + if path.endswith('/task/service'): + new_path = path + elif path == '': + new_path = '/task/service' + else: + new_path = f'{path}/task/service' + + return urllib.parse.urlunparse( + (ws_scheme, parsed.netloc, new_path, parsed.params, parsed.query, parsed.fragment), + ) def _set_uri(self, uri: str) -> None: """Update the server URI (internal).""" diff --git a/packages/client-python/tests/RocketRideClient_test.py b/packages/client-python/tests/RocketRideClient_test.py index 7f3d835e8..4416cdf11 100644 --- a/packages/client-python/tests/RocketRideClient_test.py +++ b/packages/client-python/tests/RocketRideClient_test.py @@ -2368,8 +2368,11 @@ async def _check(): [ ('wss://cloud.rocketride.ai', 'wss://cloud.rocketride.ai/task/service'), ('https://cloud.rocketride.ai', 'wss://cloud.rocketride.ai/task/service'), + ('https://cloud.rocketride.ai/', 'wss://cloud.rocketride.ai/task/service'), ('ws://localhost:5565', 'ws://localhost:5565/task/service'), ('http://localhost:5565', 'ws://localhost:5565/task/service'), + ('ws://localhost:5565/task/service', 'ws://localhost:5565/task/service'), + ('ws://localhost:5565/task/service/', 'ws://localhost:5565/task/service'), ], ) def test_get_websocket_uri_normalization(input_uri: str, expected_uri: str) -> None: