Skip to content

Commit 1c3b069

Browse files
kraenhansenclaude
andcommitted
fix: use RFC 3986 percent-encoding to avoid invalidating signed URLs
urlencode defaults to quote_plus which encodes spaces as `+` instead of `%20`. This can break signed URL signatures when the server validates against the original encoding. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 18693b0 commit 1c3b069

3 files changed

Lines changed: 3 additions & 3 deletions

File tree

src/elevenlabs/conversational_ai/conversation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ def _get_signed_url(self):
442442
parsed = urllib.parse.urlparse(signed_url)
443443
existing_params = urllib.parse.parse_qsl(parsed.query, keep_blank_values=True)
444444
existing_params.extend([("source", "python_sdk"), ("version", __version__)])
445-
return urllib.parse.urlunparse(parsed._replace(query=urllib.parse.urlencode(existing_params)))
445+
return urllib.parse.urlunparse(parsed._replace(query=urllib.parse.urlencode(existing_params, quote_via=urllib.parse.quote)))
446446

447447
def _create_on_prem_initiation_message(self):
448448
return json.dumps(

src/elevenlabs/url_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ def build_ws_url(
2323
parsed.netloc,
2424
parsed.path.rstrip("/") + "/" + path,
2525
"",
26-
urllib.parse.urlencode(params),
26+
urllib.parse.urlencode(params, quote_via=urllib.parse.quote),
2727
"",
2828
))

tests/test_url_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def test_tuple_params(self):
6262

6363
def test_params_percent_encoded(self):
6464
url = build_ws_url("wss://api.example.com", ["v1"], {"term": "hello world"})
65-
assert "term=hello+world" in url
65+
assert "term=hello%20world" in url
6666

6767
def test_repeated_keys(self):
6868
url = build_ws_url("wss://api.example.com", ["v1"], [("k", "a"), ("k", "b")])

0 commit comments

Comments
 (0)